Problema de Android para averiguar la última corrección GPS reciente

Mi aplicación utiliza LocationListener para realizar un seguimiento de la ubicación actual. Siempre y cuando el proveedor de GPS está proporcionando correcciones regulares esto funciona bien. Sin embargo, quiero que mi aplicación advierta al usuario si la ubicación ya no es fiable porque la corrección ya no está actualizada. Por lo tanto, he utilizado un timeCheckHandler para llamar a getLastKnownLocation cada pocos segundos.

Mi problema es que incluso cuando se están recibiendo correcciones precisas con frecuencia el tiempo devuelto por la aplicación de getTime () a la ubicación devuelta por getLastKnownLocation es generalmente más antiguo que el tiempo actual devuelto por System.currentTimeMillis (), a menudo por unos 20 segundos.

He investigado el problema añadiendo código a onLocationChanged (arg0) para registrar la hora de la corrección (arg0.getTime ()) y la hora actual (System.currentTimeMillis ()). Nuevamente veo una diferencia de unos 20 segundos.

El código actualmente se lee como sigue:

public void onLocationChanged(Location arg0) { mapview.handleLocationChanged(mapview, arg0.getLatitude(), arg0.getLongitude(), arg0.getBearing(), arg0.getAccuracy(), "GPS fix"); addDebugNote("Fix received at time: "+Long.toString(arg0.getTime()/1000)+" Now: "+Long.toString((System.currentTimeMillis())/1000)); } 

Y la salida típica a mi archivo de la depuración lee:

 Fix received at time: 1292091908 Now: 1292091928 

¿Por qué debo ver esta diferencia entre el tiempo de reparación y la hora actual del sistema?

¿Tengo que aceptar que una diferencia de unos 20 segundos es normal?

2 Solutions collect form web for “Problema de Android para averiguar la última corrección GPS reciente”

El tiempo de ubicación del GPS viene independientemente del tiempo del proveedor de la red y del tiempo del dispositivo. System.currentTimeMillis () le dará la hora del dispositivo establecida en su dispositivo.

Si desea saber qué tan reciente es el punto es que puede:

  1. Sincronice los tiempos (GPS y dispositivo) en su código en el inicio de la aplicación tomando la diferencia entre ambos tan pronto como reciba la primera actualización de ubicación GPS. En ese instante de tiempo de dispositivo de consulta y ver cuál es la diferencia en ambos. Guardar esta diferencia en la variable.

  2. Utilice esto como un factor de corrección en las actualizaciones posteriores de la ubicación para conocer la hora exacta basada en el marco de referencia que necesita. (Tiempo del dispositivo o GPS)

También había encontrado que utilizando NETWORK como proveedor de ubicación puede obtener sólo el tiempo del dispositivo. Así que si está escuchando las actualizaciones de ambos (GPS y red), también puede ser necesario distinguir esto usando location_obj.getProvider () y filtrar el proveedor de GPS.

Repitiendo la prueba de hoy he encontrado que la diferencia entre el tiempo GPS y el tiempo del sistema es de 22 segundos. Este problema se discute en otras partes de la web y parece que es normal que haya una diferencia entre el tiempo del GPS y el tiempo del sistema del teléfono (que en mi caso está configurado para ser actualizado automáticamente desde la red). El tiempo es de unos 15 o 17 segundos (dependiendo de qué fuente es correcta) de la hora UTC … está fuera de sincronización porque el tiempo GPS no se ha actualizado desde 1980 para "segundos de salto" periódicos.

Teniendo esto en cuenta creo que la respuesta a mi necesidad de comprobar cómo actual la última solución es será comparar la hora del sistema actual con el tiempo del sistema (no el tiempo de GPS) de la última solución.

  • Tiempo desde el primer arranque
  • ¿Cambia el tiempo de uso de Android a Celsius?
  • Haga que el temporizador de cuenta regresiva pase de 10sec a 1sec
  • ¿Cómo se calcula el tiempo del rezo musulmán en una aplicación androide?
  • Android limitar el tiempo de grabación con la intención
  • que muestran la hora actual en TimePicker en android
  • Retardo de tiempo en Android
  • Sincronizar la hora del sistema en 2 teléfonos
  • Cómo sincronizar correctamente el código RenderScript de Android en Nvidia Shield
  • Capturar / Interceptar los intentos de Android durante el tiempo de ejecución
  • Android: cambia el formato de hora según el formato de hora actual del dispositivo
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.