2011-10-12 9 views
10

Recibo actualizaciones de ubicación periódicamente por GPS, el problema es el tiempo transcurrido hasta que se produce la primera actualización de ubicación: es demasiado larga. Cuando el usuario está dentro de un edificio, esta vez se vuelve aún peor.Estrategia de ubicación de inicio

Por lo tanto, estoy buscando algunas estrategias para mejorar el tiempo de inicio (en este momento no utilizo getLastKnownLocation pero lo haré). Comencé a leer A Deep Dive Into Location para obtener algunas ideas y tener algunas reflexiones que quisiera comentar con ustedes.

Al principio, la publicación de blog mencionada anteriormente pasa por cada proveedor de ubicación en el dispositivo y consulta el getLastKnownLocation, pero solo los considera cuando no son antiguos y con una precisión permitida.

Aquí viene mi primera pregunta: esperaría tener la ubicación basada en la red disponible de inmediato, así que solicitaría una nueva ubicación basada en la red, luego obtendría getLastKnownLocation del proveedor de GPS y si la última ubicación del GPS es dentro del círculo formado por la ubicación basada en la red de puntos y la precisión del radio, tomaría la ubicación del GPS, independientemente de la antigüedad. ¿Qué piensas?

Después de comprobar la última ubicación conocida voy a iniciar el seguimiento de la posición GPS y porque sólo se necesita cada 2 segundos y el cambio 10m, me gustaría utilizar lm.requestLocationUpdates(LocationManager.GPS_PROVIDER, 2 * 1000, 10, this);

Sin embargo he encontrado un patrón (dentro de la presentación Being Epic: Best Practices for Android Development en diapositiva 95 y 96 que al principio activa ubicaciones gruesas y finas (con 0,0 para cambios de tiempo y distancia) y luego, cuando se recibe el primer evento, cambia a la frecuencia de actualización realmente necesaria. -actualiza más rápido cuando el intervalo se establece en 0?

En opp En cuanto a este patrón, mantendría la actualización aproximada hasta que se reciba la primera actualización de GPS. ¿Qué piensas?

Espero obtener algunas respuestas interesantes!

---------------- ---------------- actualización

hice algunas investigaciones: Encendí GPS y esperé para obtener una solución. Luego apagué el GPS y manejé 50 km (31 millas). Luego usé el código de A Deep Dive Into Location para obtener todos los getLastKnownLocation. Lo probé dos veces, primero con el GPS apagado y el segundo con el GPS encendido, pero sin un arreglo:

1) con el GPS apagado llegué
- Proveedor: la red, la ubicación correcta con exactitud 680m
- Proveedor : pasivo (mProvider = red), mismo lugar que el anterior, mismo tiempo que el anterior
- Proveedor: GPS, la ubicación nula

Así aprendí que cuando el GPS está desactivado no se obtiene ningún getLastKnownLocation.

2) con el GPS encendido llegué
- Proveedor: la red, la ubicación correcta con exactitud 652m
- Proveedor: pasivo (mProvider = red), el mismo lugar que el anterior, mismo tiempo que el anterior
- Proveedor: gps, ubicación como fue 2 horas antes con precisión 12m, el tiempo también fue 2 horas antes

Aquí aprendí que los mensajes antiguos no se invalidan, incluso es obvio que están equivocados.

En ese caso, el algoritmo funciona bien, porque me moví en el momento en que apagué el GPS. ¿Pero y si entro en una casa? En ese caso, el resultado del GPS de 2 horas sería muy bueno, incluso si está desactualizado.

+0

Buen enlace para la posición del dibujo en los mapas de Google incluyendo el radio (la precisión): [freemaptools] (http://www.freemaptools.com/radius-around-point.htm) – ChrLipp

Respuesta

4

En el Google IO 2013 se mostró en la sesión Beyond the Blue Dot: New Features in Android Location un nuevo enfoque, ver el video here.

Los ingenieros de Google probaron muchas estrategias diferentes, el resultado es el "proveedor de ubicación fusionada". Su calidad se muestra a las 12:17 en el video.

Ketan Parmar ha publicado blog post cómo se puede usar el proveedor de ubicación fusionada en una aplicación de ejemplo.

+0

¿El proveedor de ubicación fusionada necesita AlarmManager y WakeLock? para obtener la ubicación con frecuencia y evitar que el dispositivo duerma e incluso obtener ubicación cuando la aplicación está en segundo plano? ¿O Fused lo hace solo y AlarmManager y WakeLock están dentro de Google Play API? –

0

Lance el administrador de ubicación con el proveedor pasiva primera

locationManager.requestLocationUpdates(LocationManager.PASSIVE_PROVIDER, AlarmManager.INTERVAL_FIFTEEN_MINUTES, 75, this); 

continuación, una vez que se recibe una respuesta de que se puede cambiar a su hardware GPS.

locationManager.requestLocationUpdates(LocationManager.GPS_PROVIDER, 0, 0, this); 
Cuestiones relacionadas