android - tracker - wialon maps
¿Sincronizar dispositivos Android vía GPS? (3)
Version corta:
Problema: necesito varios dispositivos Android para hacer algo al mismo tiempo (dentro de unos 100 milisegundos). Por ejemplo, quiero que todos los dispositivos reproduzcan un cierto sonido en un momento determinado previamente.
Pregunta: ¿Puedo usar la hora del GPS para asegurarme de que los dispositivos estén sincronizados?
Versión más larga:
Varias personas que tienen dispositivos Android están en la misma ubicación al aire libre (para algún evento deportivo específico). Todos los dispositivos deben indicar ciertos eventos al mismo tiempo. (El tiempo se determinará de antemano y no es importante que lo hagan exactamente en ese momento, siempre y cuando lo hagan al mismo tiempo). FWIW: esos eventos ayudarán a las personas a comenzar su actividad deportiva al mismo tiempo.
Aquí hay suposiciones que puedo hacer:
- Puede haber o no cobertura celular. (Está al aire libre y puede estar lejos de las zonas urbanas)
- Los dispositivos pueden o no estar conectados a internet. (Algunas personas pueden no tener un plan de datos)
- Los dispositivos pueden hablar entre sí. Si los dispositivos no están conectados a Internet, se conectarán a través de wifi (aunque es posible que el wifi no tenga una puerta de enlace a Internet).
- Los dispositivos están fuera (y no dentro de edificios). (Eso es bueno, significa que todos los dispositivos pueden obtener un GPS fijo)
- Los dispositivos están físicamente cerca uno del otro (es decir, dentro de 300 m2). (No estoy seguro de si eso es importante)
No puedo usar el reloj interno para saber cuándo reproducir eventos: los usuarios pueden cambiar manualmente la hora e incluso si un dispositivo está configurado para obtener la hora de una red celular, es posible que esa red no proporcione la hora exacta. Dos dispositivos pueden reservarse en redes diferentes y, por lo tanto, su tiempo puede no estar muy bien sincronizado.
Al inicio de la aplicación, cada dispositivo podría solicitar una corrección de GPS y guardar la diferencia entre la hora del GPS y su reloj interno. Ahora el maestro podría anunciar eventos basados en este tiempo de GPS (al usar su reloj interno y al restar el desplazamiento guardado anteriormente).
¿Será esto suficientemente preciso y confiable?
Muchas gracias de antemano, Andreas Leitner.
No puede confiar totalmente en la hora del GPS ya que hay un problema conocido en algunos dispositivos que indica que la hora de recuperación de algunos dispositivos es un día por delante. En ese caso podría obtener una gran compensación.
http://code.google.com/p/android/issues/detail?id=23937
Una solución para resolver este problema se ha discutido aquí: Android: Samsung Galaxy Tabs y dispositivos Android 2.2 que muestran la fecha de GPS 1 día antes del 1 de enero de 2012
UTC no se deriva de GPS, APK anula GPS. Android configurado para ignorar el reloj del GPS. Eres getTime () es NIST. no GPS
Puede obtener la diferencia de tiempo en milisegundos de currentTimeMillis()
y Location.getTime()
en la devolución de llamada onLocationChanged()
. Utilice requestSingleUpdate()
Solo quiero agregar que, si el usuario tiene una conexión de datos, puede usar el tiempo NTP, que es aún más preciso, ya que el reloj interno del GPS puede desviarse y corregirlo toma un tiempo.
EDITAR: Quiero editar esta respuesta. Después de trabajar como desarrollador de GNSS en el sistema operativo Android, me di cuenta de que muchos OEM de Android "importantes" han echado a perder esto. Por lo general, las sentencias NMEA se generan en el conjunto de chips o GNSS. A veces el momento es correcto, depende de la implementación.
También hay un problema de segundo salto. La hora del GPS no es la hora UTC. Y a partir de este escrito es de 18 segundos por delante .
También la hora del GPS desde los objetos de Location
ahora es la hora del sistema según la documentación
TLDR: usa el tiempo NTP