2011-03-10 8 views
5

¿Cuál es la mejor forma en Android para obtener el estado de un proveedor de ubicación? Al registrar LocationListener para actualizaciones de ubicación, se llamará a la devolución de llamada onStatusChanged(String provider, int status, Bundle extras) cada vez que se cambie el estado. Sin embargo, no encontré la forma de obtener el estado actual (AVAILABLE, OUT_OF_SERVICE, TEMPORARILY_UNAVAILABLE) sin registrarme en las actualizaciones de ubicación. El método isProviderEnabled solo indica si el proveedor generalmente está encendido o no (en la configuración del dispositivo), por lo que puede devolver true aunque el proveedor esté fuera de servicio ... ¿Hay alguna otra manera de hacerlo?Android Location API: obtenga el estado del proveedor

Otra pregunta: ¿es posible escuchar las actualizaciones de estado sin registrarse para las actualizaciones de ubicación? Quiero escuchar sobre un proveedor específico para las ubicaciones, pero al mismo tiempo verificar si hay otras disponibles. Mi solución actual es establecer el tiempo y la distancia mínima a un valor muy alto, pero me pregunto si hay una solución mejor ...

¡Gracias por cualquier pista!

Por cierto: si es posible, las soluciones deben trabajar con Android 1.1

+0

No sé cómo hacer lo que quiere. Pero podría obtener la última ubicación conocida ('LocationManager.getLastKnownLocation') y ver si es reciente. Esto le daría un estimado si el proveedor está disponible o no. –

Respuesta

2

¿Por qué quiere el estado del GPS, si usted no está interesado en la ubicación?

Sin embargo, se puede conseguir por lo menos algunos aspectos del estado del GPS así:

final GpsStatus gs = this.locationManager.getGpsStatus(null); 
int i = 0; 
final Iterator<GpsSatellite> it = gs.getSatellites().iterator(); 
while(it.hasNext()) { 
    it.next(); 
    i += 1; 
} 
this.gpsSatsAvailable = i; 

Ver http://developer.android.com/reference/android/location/GpsStatus.html necesitará al menos 4 satélites para una solución 2D preciso y 5 para una solución 3D (incluida la altitud). Según la documentación, debe acceder al estado desde onStatusChanged() para obtener información coherente. Funciona también desde fuera de este método. El documento vinculado explica qué problemas pueden ocurrir. Por supuesto, aún necesita escuchar las actualizaciones de ubicación, porque el estado del GPS no se actualiza de otra manera.

+0

¿Por qué? En mi caso, porque estoy desarrollando una aplicación técnica que muestra una pantalla de estado de varios sensores integrados y conectados a bluetooth, por lo que tener un valor inicial para mostrar solo tiene sentido. Más filosóficamente, si el "estado" es lo suficientemente importante como para merecer su propio manejador de cambios, seguramente es lo suficientemente importante como para poder consultar su valor actual. – GISmatters

+0

Tienes un punto ahí. – Stefan

Cuestiones relacionadas