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.
- ¿Cómo acceder al cambio de ubicación en segundo plano para Google Maps android API v2?
- Cómo obtener el nombre de satélite o el número cuando estamos recibiendo la ubicación a través de GPS en Android?
- GetTriggeringGeofences y getGeofenceTransition de LocationServices
- Dar localización falsa al emulador de Genymotion
- ¿Cómo obtener la ubicación actual de este código de mapa? También intento recibir datos del vehículo del servidor cuando estoy abierto el mapa
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?
- LocationClient getLastLocation () devolver null
- requestLocationUpdates () en un hilo independiente
- ¿Es posible simular ubicaciones con el nuevo proveedor de ubicación fusionado de Google?
- obtener la ubicación actual (gps / wifi)
- Cómo obtener el nombre de la ciudad por latitud y longitud en android?
- Android Locationprovider tarda demasiado tiempo en llegar a estar temporalmente no disponible
- Actualizaciones de ubicación que no funcionan en interiores como lo reclaman las API del proveedor de ubicaciones de Fusion
- Donde el archivo .apk se coloca en el teléfono después de la instalació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); } }