¿Por qué locationmanager devuelve viejas correcciones de ubicación con new gettime-timestamp?

Tenemos una aplicación que cuando se intenta obtener una corrección de ubicación. Se escucha tanto en GPS y la red y tiene una matriz de decisión basada en el tiempo / precisión para determinar cuándo dejar de escuchar y qué arreglo para volver.

Hemos notado, en ocasiones, un comportamiento muy extraño. Utilizamos la forma clásica de ver qué edad tiene la solución, así:

long age = now - newLocation.getTime(); if(age >= prefs.getLocationMaxAge()){ Log.d(TAG, "location too old."); return; } 

Pero a veces, el location.getTime devuelto desde el sistema operativo tiene una edad de quizás 15-20 segundos, de acuerdo con la marca de tiempo devuelta, aunque podemos decir con certeza que es muy antiguo. Por ejemplo, si la corrección de longitud / latitud es de una posición que el teléfono estaba en 30 minutos atrás!

Parece que sucede tanto de Wi-Fi y la red, pero no GPS. Para mí, esto es totalmente loco. ¿Alguien más ha visto esto y hay alguna forma de evitarlo?

Lo hemos conseguido en un par de teléfonos diferentes, el más reciente es Samsung Galaxy S II .

La ayuda sería extremadamente agradable.

EDIT : Para ser realmente claro, el problema es que el "onlocationchanged" devolución de llamada es llamado por el sistema operativo con una ubicación con un timestamp edad de quizás un par de segundos, cuando sé con certeza que la longitud / latitud en el "nuevo" Es un lugar donde el teléfono no ha estado en por al menos 30 minutos.

Esto hace que sea difícil determinar con precisión dónde está el teléfono …

Parece que sucede tanto desde Wi-Fi y la red, pero no GPS

Esto parece justo, porque en el Wi-Fi y la red de células basadas en la triangulación, la precisión es muy mala. Es probable que utilicen ubicaciones en caché que datan de hace 30 minutos. A menos que usted no haya cambiado su sitio de la célula o se haya movido a otro edificio de modo que los nuevos APs se puedan descubrir, me temo que usted conseguirá solamente localizaciones en caché. Si desea ubicaciones nuevas, utilice el proveedor de GPS.

  • ¿Cómo funciona getSystemService () exactamente?
  • ¿Cómo puede obtener una ubicación en android cuando todos los proveedores de ubicación están inhabilitados?
  • Asistencia de inyección de datos en GPS
  • LocationManager.isProviderEnabled (LocationManager.NETWORK_PROVIDER) no es fiable, ¿por qué?
  • Android LocationManager.isProviderEnabled () siempre devuelve false
  • LocationListener de NETWORK_PROVIDER está habilitado pero, onLocationChanged nunca se llama
  • Permisos del administrador de ubicaciones de Android que se utilizarán
  • Inicio de LocationManager como servicio Android
  • Anular la suscripción de un LocationListener desde LocationManager
  • NETWORK_PROVIDER no proporciona ubicaciones actualizadas
  • Forzar la alerta de proximidad para usar Proveedor de red
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.