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);