java - programacion - Excepción del puntero nulo de Android locationManager?(¿cómo pasar el contexto?)
manual android studio avanzado (2)
Cree la clase One que amplíe el Servicio y en este implemente la tarea GPS porque en la Actividad que detendrá / pausará / destruirá y no podrá obtener cada vez. El servicio se ejecutará en segundo plano para que pueda obtener la coordinación del GPS en cualquier momento y definir el objeto de ubicación como estático público para que pueda usarlo en cualquier lugar de su aplicación.
Tengo un problema aquí y no puedo hacer que funcione ... Quiero obtener las últimas posiciones de GPS, pero lo único que obtengo es una excepción de puntero nulo. Funciona con GPSActivity de primera clase pero no con el 2nd SmsReceiver.
Leí que quizás sea porque tengo que pasar el contexto a la segunda clase, pero no sé cómo ... ¡ayúdenme!
Aquí viene el código:
GPSActivity.class
:
import android.app.Activity;
import android.content.Context;
import android.location.Location;
import android.location.LocationListener;
import android.location.LocationManager;
import android.os.Bundle;
import android.view.View;
import android.widget.Toast;
public class GPSActivity extends Activity {
long MINIMUM_DISTANCE_CHANGE_FOR_UPDATES = 1; // in Meters
long MINIMUM_TIME_BETWEEN_UPDATES = 10000; // in Milliseconds
LocationManager locationManager;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
locationManager =
(LocationManager) getSystemService(Context.LOCATION_SERVICE);
locationManager.getAllProviders();
locationManager.requestLocationUpdates(
LocationManager.GPS_PROVIDER,
MINIMUM_TIME_BETWEEN_UPDATES,
MINIMUM_DISTANCE_CHANGE_FOR_UPDATES,
new MyLocationListener());
}
public void showCurrentLocation() {
Location location =
locationManager.getLastKnownLocation(LocationManager.GPS_PROVIDER);
if (location != null) {
String message = String.format(
"Current Location /n Longitude: %1$s /n Latitude: %2$s",
location.getLongitude(), location.getLatitude());
Toast.makeText(GPSActivity.this, message,
Toast.LENGTH_LONG).show();
}
}
}
(Deshice el código un poco)
Ahora, puedo llamar a showCurrentLocation y me muestra los valores long y lat.
¿Cómo puedo hacer esto aquí?
SmsReceive.class
(cuando se recibe un sms, envía las coordenadas gps)
import ...
public class SmsReceiver extends BroadcastReceiver
{
@Override
public void onReceive(Context context, Intent intent)
{
GPSActivity myGPS;
myGPS = new GPSActivity();
//---get the SMS message passed in---
Bundle bundle = intent.getExtras();
SmsMessage[] msgs = null;
if (bundle != null) {
//HERE I GET THE NULL POINTER EXCEPTION
Location loc =
myGPS.locationManager.getLastKnownLocation(LocationManager.GPS_PROVIDER);
double varLong = loc.getLongitude();
double varLat = loc.getLatitude();
String locationData = "LONG: " + varLong+ " LAT: " + varLat;
Toast.makeText(context, locationData, Toast.LENGTH_SHORT).show();
}
}
}
¡Gracias!
declare un nuevo locationManager en la clase smsReceiver y use las siguientes líneas
mLocationManager = (LocationManager) context.getSystemService(Context.LOCATION_SERVICE);
Location loc = mLocationManager.getLastKnownLocation(LocationManager.GPS_PROVIDER);