Pregunta

Estoy empezando a meter mis dedos en LocationManager. He creado un servicio que rastrea la ubicación GPS (intervalo es más de 60000ms) y actualiza mi solicitud con la ubicación del usuario para que puedan encontrar cosas cerca.

A mi entender, los usuarios pueden ir a sus preferencias y desactivar el GPS para una aplicación particular.

Me esencialmente como para ofrecer mis usuarios dos modos. 1) GPS. 2) Si GPS no puede tirar, dispositivo no tiene un chip GPS o GPS está desactivado para mi aplicación , me gustaría que les permita tipo en su código postal (o tal vez cambiar a células torre de búsqueda).

El texto en negrita es lo que me interesa. ¿Cómo puedo saber si el dispositivo no tiene GPS? ¿Cómo puedo saber si el usuario tiene GPS con discapacidad para mi aplicación?

pregunta al margen: Mi servicio se puso en marcha de mi segunda actividad. Me llamo stopService en el método OnDestroy de esta actividad. Si una copia de seguridad de mi primera actividad y la segunda actividad es destruida, todavía noto el icono de GPS en mi teléfono en funcionamiento. Se detiene el servicio suficiente? ¿O tengo que parar la LocationManager en el OnDestroy del servicio?

¿Fue útil?

Solución

Si un usuario no tiene GPS activado, aún podía tener wifi / red activa como una fuente de ubicación en sus ajustes del teléfono, por lo tanto, usted podría utilizar esos datos también.

Siempre se puede obtener la última ubicación conocida del GPS o de red a través de

locationManager.getLastKnownLocation(LocationManager.GPS_PROVIDER);

y / o

locationManager.getLastKnownLocation(LocationManager.NETWORK_PROVIDER)

Se mantiene la última ubicación conocida por el dispositivo, que puede ser desde la aplicación o desde cualquier otra aplicación que tiene GPS usado antes.

En realidad se puede utilizar dos localizadores con diferentes proveedores: una con GPS_PROVIDER y otro con NETWORK_PROVIDER. GPS es más preciso, pero por lo general sólo trabaja al aire libre bajo el cielo libre de por qué funciona NETWORK_PROVIDER el interior, pero es menos precisa. Además, el GPS podría tomar un tiempo hasta que se consigue un primer punto de referencia después de inicializar (a veces es decir, un minuto o más), mientras que la red es conseguir la ubicación casi inmediatamente.

Debe leer este post, es muy detallado y tiene código de ejemplo: ¿Cuál es la forma más sencilla y robusta para obtener la ubicación actual del usuario en Android?

En cuanto a la segunda pregunta: antes de parar el servicio, también debe anular el registro del oyente ubicación. Para ello, puede onPause o OnDestroy.

locationManager.removeUpdates(baseLocationListener)

o

locationManager.removeAllUpdates()

Creo que en su caso utilizando getLastKnowLocation () está muy bien.

Sin embargo, si usted quiere saber explícitamente sobre el estado del GPS, se puede implementar un estado de GPS oyente y luego usar algo como abajo, que le indica si el GPS tiene ninguna conexión con el satélite o no - pero como se ha dicho, no me' creo que esto es realmente necesario.

final class GpsStatusListener implements GpsStatus.Listener {
    public void onGpsStatusChanged(int i) {

        if (i==GpsStatus.GPS_EVENT_FIRST_FIX) {
            Log.d(AskTingTing.APP, "gpsx.fixed.");
            for (GpsSatellite sat:locationManager.getGpsStatus(null).getSatellites()) {
                Log.d(AskTingTing.APP, "gpsx.GpsStatus.Sat.fixed: " + sat.usedInFix());
            }
        }
    }
}

Mira el enlace de arriba para un buen ejemplo de código.

Otros consejos

Si el dispositivo no tiene GPS o que no está disponible los valores devueltos (lat, lng) por el Administrador de ubicaciones serán iguales a null por lo que sólo comprobar los valores y pedirá al usuario que introduzca su ubicación. Me gustaría recomendar geocodificación inversa para obtener un valor LAT / LNG para su ubicación en ese caso.

pregunta al margen:. No estoy tan seguro de que supongo que había necesidad de destruirlo si todavía está funcionando

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top