update studio manager last known example change android service location

studio - location manager android example



El servicio de ubicación onProviderEnabled nunca se llamó (1)

Tengo un servicio para actualizar la ubicación en mi aplicación. Cuando inicio mi aplicación con desactivación de GPS, vuelvo al menú de Android y habilito el GPS, y finalmente regreso a mi aplicación (el servicio no se ha destruido), nunca se llama a onProviderEnabled. ¿Alguien podría ayudar?

ACTUALIZACIÓN: si reinicio la aplicación, el proveedor está habilitado. Solo onProviderEnabled no se llama ...

En cada actividad en la que necesito ubicación, lo hago

super.onCreate(savedInstanceState); //.... // Bind location service bindService(new Intent(this, LocationService.class), mConnection, Context.BIND_AUTO_CREATE); //....

y

@Override protected void onDestroy() { super.onDestroy(); // Unbind LocationService ItemDetail.this.unbindService(mConnection); }

y el servicio es

public class LocationService extends Service implements LocationListener { LocationManager locationManager; @Override public IBinder onBind(Intent intent) { return null; } @Override public void onCreate() { locationManager = (LocationManager)getSystemService(Context.LOCATION_SERVICE); if (locationManager.isProviderEnabled(LocationManager.GPS_PROVIDER)){ // Update after minimum 5 minutes and if user has moved at least 100 meters. locationManager.requestLocationUpdates(LocationManager.GPS_PROVIDER, 5 * 60 * 1000, 100, this); Location loc = getBestLocation(locationManager); if(loc!=null){ GlobalVars.lat = (Double) (loc.getLatitude()); GlobalVars.lng = (Double) (loc.getLongitude()); } } } public void onLocationChanged(Location loc) { GlobalVars.lat = (Double) (loc.getLatitude()); GlobalVars.lng = (Double) (loc.getLongitude()); } public static Location getBestLocation(LocationManager locationManager) { Location location_gps = locationManager.getLastKnownLocation(LocationManager.GPS_PROVIDER); Location location_network = locationManager.getLastKnownLocation(LocationManager.NETWORK_PROVIDER); // If both are available, get the most recent if(location_gps!=null && location_network !=null) { return (location_gps.getTime() > location_network.getTime())?location_gps:location_network; } else if(location_gps==null && location_network ==null){ return null; } else return (location_gps==null)?location_network:location_gps; } public void onProviderEnabled(String s){ locationManager.requestLocationUpdates(LocationManager.GPS_PROVIDER, 5 * 60 * 1000, 100, this); } public void onProviderDisabled(String s){ locationManager.removeUpdates(this); GlobalVars.lat = null; GlobalVars.lng = null; } public void onStatusChanged(String s, int i, Bundle b){} @Override public void onDestroy() { locationManager.removeUpdates(this); } }


En su método LocationService.onCreate() su código verifica si el proveedor de GPS está deshabilitado.

if (locationManager.isProviderEnabled(LocationManager.GPS_PROVIDER)){

Pero solo inicia la suscripción si ya está habilitada. Tenga en cuenta que su oyente nunca se registra con LocationManager y no recibirá ninguna actualización de los proveedores de ubicación que estén deshabilitados o habilitados. Más bien cambie su método onCreate para llamar siempre

locationManager.requestLocationUpdates(LocationManager.GPS_PROVIDER, 5 * 60 * 1000, 100, this);