public void onCreate() {
locationListener = new GeoUpdateHandler();
locationManager = (LocationManager) getSystemService(Context.LOCATION_SERVICE);
try {
gps_enabled = locationManager.isProviderEnabled(LocationManager.GPS_PROVIDER);
network_enabled = locationManager.isProviderEnabled(LocationManager.NETWORK_PROVIDER);
} catch (Exception ex) {
}
if(gps_enabled) {
locationManager.requestLocationUpdates(LocationManager.GPS_PROVIDER, TIME_DURATION, 100, locationListener);
} else if(network_enabled) { // Checking for GSM
locationManager.requestLocationUpdates(LocationManager.NETWORK_PROVIDER, TIME_DURATION, DISTANCE, locationListener);
}
}
public class GeoUpdateHandler implements LocationListener {
private void getPresentLocation(Location location) {
...
//Fetch the locations
...
}
@Override
public void onProviderDisabled(String provider) { }
@Override
public void onProviderEnabled(String provider) { }
@Override
public void onStatusChanged(String provider, int status, Bundle extras) { }
@Override
public void onLocationChanged(Location location) {
getPresentLocation(location);
}
}
este es mi fragmento de código y mi problema es que una vez que la aplicación se instala con GPS activado, no cambia a GSM para recuperar la ubicación una vez que desactivamos el GPS , y viceversa.Alternar entre gps y el proveedor de red según la disponibilidad
Así que por favor, dígame una manera de cambiar de manera eficiente entre el GPS y GSM de acuerdo a la disponibilidad del proveedor de ubicación.
NOTA: Mi aplicación es un servicio.
Gracias.
Editar: Tengo una BroadcastReceiver, por eso supongo que el onCreate() será invocado una vez que el GPS ON/OFF suceda.
También trató de comprobar la disponibilidad del proveedor en onLocationChanged (ubicación, ubicación). Pero no ayudó.
EDIT: He modificado mi onProviderDisabled & onProviderEnabled como este, Por favor, diga lo que estoy haciendo mal aquí ..
public void onProviderDisabled(String provider) {
locationManager.removeUpdates(locationListener);
if (provider.toLowerCase().equals(LocationManager.GPS_PROVIDER)) {
locationManager.requestLocationUpdates(LocationManager.NETWORK_PROVIDER, TIME_DURATION, 1, locationListener);
} else {
locationManager.requestLocationUpdates(LocationManager.GPS_PROVIDER, TIME_DURATION, 1, locationListener);
}
}
@Override
public void onProviderEnabled(String provider) {
locationManager.removeUpdates(locationListener);
if (provider.toLowerCase().equals(LocationManager.GPS_PROVIDER)) {
locationManager.requestLocationUpdates(LocationManager.GPS_PROVIDER, TIME_DURATION, 1, locationListener);
} else {
locationManager.requestLocationUpdates(LocationManager.NETWORK_PROVIDER, TIME_DURATION, 1, locationListener);
}
}
sí, aquí encontré otro problema, mi onProviderEnabled() no me llamaron. – Lenin