NullpointerException al llamar a getSystemService (Context.LOCATION_SERVICE) y onLocationChanged no se llama

Estoy intentando crear un servicio del fondo que actualice la posición actual de los gps. Estoy recibiendo una NullPointerException en la línea LocationManager lm = (LocationManager) getSystemService(Context.LOCATION_SERVICE);

HomeActivity lanza un servicio

 startService(new Intent(getApplicationContext(), ForHire.class)); 

Service (ForHire) crea una actualización de TimerTask

 public class ForHire extends Service { ... private Timer getUpdatesNow = new Timer(); private Updates updates = new Updates(getUpdatesNow); @Override public void onCreate() { ... getUpdatesNow.schedule(updates, God.KM20TIME); Log.v("Taxeeta", "Notification created"); } private class Updates extends TimerTask implements LocationListener { private Timer getUpdatesNow; public Updates(Timer newGetUpdatesNow) { super(); getUpdatesNow = newGetUpdatesNow; LocationManager lm = (LocationManager) getSystemService(Context.LOCATION_SERVICE); lm.requestLocationUpdates(LocationManager.GPS_PROVIDER, God.KM20TIME, God.KM20DISTANCE, (LocationListener) this); } public void run() { ... //do some cleanup } @Override public void onLocationChanged(Location location) { Log.v("Taxeeta", "Location changed"); // do a update of the current location. } 

El primer problema es que obtengo esa NullPointerException. El segundo problema es que onLocationChanged nunca se llama si comento fuera LocationManager lm = (LocationManager) getSystemService(Context.LOCATION_SERVICE); lm.requestLocationUpdates(LocationManager.GPS_PROVIDER, God.KM20TIME, God.KM20DISTANCE, (LocationListener) this); LocationManager lm = (LocationManager) getSystemService(Context.LOCATION_SERVICE); lm.requestLocationUpdates(LocationManager.GPS_PROVIDER, God.KM20TIME, God.KM20DISTANCE, (LocationListener) this); Estas 2 líneas.

Mi Manifiesto

 <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" /> <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" /> <uses-permission android:name="android.permission.INTERNET" /> <uses-permission android:name="android.permission.READ_PHONE_STATE" /> <uses-permission android:name="android.permission.ACCESS_WIFI_STATE" /> <uses-permission android:name="android.permission.CALL_PHONE" /> <application ...> ... <uses-library android:name="com.google.android.maps" /> </application> 

Que me estoy perdiendo aqui ?

Editar: Values of KM20TIME = 5000 (5 segundos) y KM20DISTANCE = 1 ( KM20DISTANCE = 1 metro). Aparte del arreglo abajo, salí de mi casa, conseguí el GPS permitido y caminé de una esquina de mi balcón al otro. Me di cuenta de que mis gps (LSB) cambiaban mientras caminaba de una esquina a la otra cada 5 segundos.

3 Solutions collect form web for “NullpointerException al llamar a getSystemService (Context.LOCATION_SERVICE) y onLocationChanged no se llama”

Lo más temprano que se puede llamar new Updates(getUpdatesNow); Está dentro del método onCreate() su servicio. La simple razón es que getSystemService() requiere un Contexto válido que no existe antes de ingresar onCreate() .

Tratar:

 private Timer getUpdatesNow; private Updates updates; @Override public void onCreate() { ... getUpdatesNow = new Timer(); updates = new Updates(getUpdatesNow); 
 // Acquire a reference to the system Location Manager LocationManager locationManager = (LocationManager) getSystemService(Context.LOCATION_SERVICE); // Define a listener that responds to location updates Location location = locationManager.getLastKnownLocation(LocationManager.NETWORK_PROVIDER); if (location != null) { Toast.makeText(getBaseContext(), "Last Location is found..", Toast.LENGTH_LONG).show(); } else { Toast.makeText(getBaseContext(), "Last Location is not found..", Toast.LENGTH_LONG).show(); } LocationListener locationListener = new LocationListener() { public void onStatusChanged(String provider, int status, Bundle extras) { } public void onProviderEnabled(String provider) { Toast.makeText(getApplicationContext(), "Gps Enabled", Toast.LENGTH_SHORT).show(); } public void onProviderDisabled(String provider) { Toast.makeText(getApplicationContext(), "Gps Disabled", Toast.LENGTH_SHORT).show(); } @Override public void onLocationChanged(Location location) { Log.i("geolocation", "lat is : " + location.getLatitude() + " and " + location.getLongitude() + ""); Toast.makeText(getBaseContext(), "Location is Changed..", Toast.LENGTH_LONG) .show(); } }; // Register the listener with the Location Manager to receive location updates locationManager.requestLocationUpdates( LocationManager.GPS_PROVIDER, 0, 0, locationListener); 
 @Override public void onCreate() { new Updates(getUpdatesNow); ... getUpdatesNow.schedule(updates, God.KM20TIME); Log.v("Taxeeta", "Notification created"); } 
  • Uso de GoogleApiClient + LocationServices sin actualizar
  • ¿Cómo obtener la ubicación exacta actual en android sin conexión a Internet?
  • Android onLocationChanged location.getTime () devuelve el tiempo incorrecto
  • Android LocationRequest: obtener una devolución de llamada cuando la solicitud caduca
  • Android: LocationManager ajusta dinámicamente los umbrales minTime / minDistance
  • OnLocationChanged sólo se llama una vez, no se actualiza
  • ¿Cómo obtener la ubicación con Wifi en Android?
  • Centro de aplicaciones de Google Maps V2 Ubicación actual en pantalla
  • Cómo encontrar la distancia correcta entre dos geopuntos en el mapa?
  • Cambiar el modo de ubicación a alta precisión mediante programación Android
  • Obtener distancia entre la ubicación actual y Selected Place en android
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.