studio - geolocalizacion android tutorial
Alternar entre gps y el proveedor de red de acuerdo con la disponibilidad (2)
Parece que solo está solicitando actualizaciones de ubicación en el método onCreate (). Una vez que los proveedores cambian, debe solicitar actualizaciones del nuevo proveedor, ¿no?
Aquí hay una publicación en el blog de Android sobre ubicaciones, también cubre la supervisión de los cambios del proveedor:
http://android-developers.blogspot.com/2011/06/deep-dive-into-location.html
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, entonces no cambia a GSM para obtener la ubicación una vez que desactivamos el GPS, y viceversa.
Así que por favor díganme una forma de cambiar eficientemente entre GPS y GSM de acuerdo a la disponibilidad del proveedor de ubicación.
NOTA: Mi aplicación es un servicio.
Gracias.
Editar: recibí un BroadcastReceiver, por eso supongo que se invocará onCreate () una vez que se active o desactive el GPS.
También intenté verificar la disponibilidad del proveedor en onLocationChanged (ubicación). Pero no ayudó.
EDITAR: modifiqué mi onProviderDisabled & onProviderEnabled así, por favor, dime 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);
}
}
Tengo una solución para esto:
public void onProviderDisabled(String provider) {
locationManager = (LocationManager) getSystemService(Context.LOCATION_SERVICE);
if (locationManager.isProviderEnabled(LocationManager.GPS_PROVIDER)) {
locationManager.requestLocationUpdates(LocationManager.GPS_PROVIDER, 0, 0, locationListener);
} else {
locationManager.requestLocationUpdates(LocationManager.NETWORK_PROVIDER, 0, 0, locationListener);
}
}
@Override
public void onProviderEnabled(String provider) {
locationManager = (LocationManager) getSystemService(Context.LOCATION_SERVICE);
if (locationManager.isProviderEnabled(LocationManager.GPS_PROVIDER)) {
locationManager.requestLocationUpdates(LocationManager.GPS_PROVIDER, 0, 0, locationListener);
} else {
locationManager.requestLocationUpdates(LocationManager.NETWORK_PROVIDER, 0, 0, locationListener);
}
}
Lo que me perdí es locationManager = (LocationManager) getSystemService (Context.LOCATION_SERVICE); en onProviderEnabled () y onProviderDisabled ().
Gracias