Conmutación entre proveedor de red y GPS

Quiero implementar un locationListener que cambiará entre la red y los proveedores de GPS en función de la disponibilidad.

Por ejemplo, si el GPS no está habilitado Quiero que utilice la red, pero tan pronto como el GPS está encendido, entonces quiero que deje de escuchar las actualizaciones de la ubicación de la red y empezar a escuchar desde el GPS.

Del mismo modo, quiero que empiece a escuchar las actualizaciones de la red tan pronto como el GPS esté apagado.

¿Es eso posible?


Subcuestion

¿El GPS es tan rápido como la red para proporcionar una corrección de ubicación?


Claro, usted acaba de obtener los proveedores de la red y GPS y pasar lo que quieras locationManager.requestLocationUpdates() .

Cuando desee dejar de escuchar a un proveedor determinado, llame a locationManager.removeUpdates() con el objeto de escucha especificado en locationManager.requestLocationUpdates() .

Red:

 Criteria crit = new Criteria(); crit.setPowerRequirement(Criteria.POWER_LOW); crit.setAccuracy(Criteria.ACCURACY_COARSE); String provider = locationManager.getBestProvider(crit, false); 

GPS:

 Criteria crit2 = new Criteria(); crit2.setAccuracy(Criteria.ACCURACY_FINE); provider2 = locationManager.getBestProvider(crit2, false); 

Puede usar LocationManager.isProviderEnabled () doc para ver si el proveedor apropiado está habilitado / deshabilitado. Hay más información disponible en los documentos de LocationManager.

GPS es generalmente mucho más lento que la red, ya que hay que encontrar 3 + satélites lejanos, etc

Estoy usando esto

 LocationManager locationManager; LocationListener locationListener; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); locationManager = (LocationManager) this .getSystemService(Context.LOCATION_SERVICE); String locationProvider = LocationManager.NETWORK_PROVIDER; Location lastKnownLocation = locationManager .getLastKnownLocation(locationProvider); if (lastKnownLocation == null) { locationProvider = LocationManager.GPS_PROVIDER; lastKnownLocation = locationManager .getLastKnownLocation(locationProvider); } if (lastKnownLocation != null) { makeUseOfNewLocation(lastKnownLocation); } locationListener = new LocationListener() { public void onLocationChanged(Location location) { makeUseOfNewLocation(location); } public void onStatusChanged(String provider, int status, Bundle extras) { } public void onProviderEnabled(String provider) { } public void onProviderDisabled(String provider) { } }; // Register the listener with the Location Manager to receive location // updates if (locationManager.isProviderEnabled(LocationManager.GPS_PROVIDER)) { locationManager.requestLocationUpdates( LocationManager.GPS_PROVIDER, 0, 0, locationListener); } else { locationManager.requestLocationUpdates( LocationManager.NETWORK_PROVIDER, 0, 0, locationListener); } } 
  • Android: ¿Una forma sencilla de hacer una geofence?
  • Bug in Android Geofence Código de ejemplo? ¿Puede alguien confirmar?
  • Se pierde el proveedor de Android Fused Location
  • Cómo falsificar la ubicación para hacer pruebas con LocationClient y Geofences en Android?
  • CellID y LAC / PSC para celdas vecinas 3G en Android
  • Comprobación del estado del GPS con Google Play Services
  • IllegalArgumentException: el proveedor no exisit: null en Maps V1
  • Error invocar método virtual 'doble android.location.Location.getLatitude ()' en una referencia de objeto nulo
  • Android Compass señala mi ubicación en lugar de norte
  • Proveedores de ubicación de Android - ¿Proveedor de GPS o de red?
  • Android-Java: location.getTime () devuelve UTC-1 en lugar de UTC si el huso horario actual es "ahorro de luz del día"
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.