2011-11-21 19 views
19

versión corta:¿Sincronizar dispositivos Android a través del tiempo GPS?

Problema: Necesito varios dispositivos Android para hacer algo al mismo tiempo exacto (dentro de aproximadamente 100 milisegundos). Por ejemplo, quiero que todos los dispositivos reproduzcan un sonido determinado en un punto previamente determinado.

Pregunta: ¿Puedo usar la hora del GPS para asegurarme de que los relojes del dispositivo estén sincronizados?

versión más larga:

Varias personas que tengan dispositivos Android están en el mismo lugar al aire libre (para algunos eventos deportivos específica). Todos los dispositivos deben señalar ciertos eventos al mismo tiempo. (A qué hora se determinará de antemano y no es importante que lo hagan exactamente en ese momento, siempre que lo hagan al mismo tiempo). FWIW: esos eventos ayudarán a las personas a comenzar su actividad deportiva al mismo tiempo.

Éstos son supuestos que puedo hacer:

  • Puede o no puede haber una cobertura celular. (Está al aire libre y puede estar lejos de las áreas urbanas)
  • Los dispositivos pueden o no estar conectados a Internet. (Algunas personas pueden no tener un plan de datos)
  • Los dispositivos pueden comunicarse 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 una corrección de GPS)
  • Los dispositivos están físicamente cerca uno del otro (es decir, dentro de 300 m2). (No estoy seguro 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 el tiempo de una red celular, esa red podría no proporcionar el momento exacto. Es posible que se reserven dos dispositivos en diferentes redes y, por lo tanto, es posible que su tiempo no se sincronice muy bien.

Al iniciar la aplicación, cada dispositivo podría solicitar una solució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 (usando su reloj interno y restando el desplazamiento que guardó anteriormente).

¿Será esto suficientemente preciso y confiable?

Muchas gracias de antemano, Andreas Leitner

+0

puede utilizar la aplicación GPS Time del mercado https://market.android.com/details?id=net.sourcewalker.gpstime – andreasg

+0

Esa es una gran idea. Puedo usar esta aplicación para probar si funciona. Eventualmente, me gustaría construir esta funcionalidad en mi aplicación. No quiero pedirles a mis usuarios que instalen otra aplicación (aunque no la necesiten) y otra aún más problemática que requiera acceso root. – user1057534

+0

Hola, estoy persiguiendo lo mismo. ¿Alguna vez lograste esto? –

Respuesta

13

Usted puede obtener la diferencia de tiempo en milisegundos desde currentTimeMillis() y Location.getTime() en el onLocationChanged() de devolución de llamada. Utilizo requestSingleUpdate()


sólo quiero añadir que, si el usuario tiene una conexión de datos que pueden utilizar el tiempo NTP, lo que es aún más preciso, ya que el reloj interno del GPS se desplace sin control y corrección que toma un tiempo.


EDIT: quiero editar esta respuesta.Después de trabajar como desarrollador de GNSS en el sistema operativo Android, me di cuenta de que muchos 'principales' OEM de Android lo habían estropeado. Normalmente, las frases NMEA se generan en el conjunto de chips o GNSS. A veces es el momento adecuado, depende de la implementación.

También hay un problema de segundos de salto. La hora del GPS no es hora UTC. Y a partir de este writing it is 18 seconds ahead.

también GPS en tiempo de Location objetos son ahora la hora del sistema de acuerdo con la documentación

TLDR: El uso NTP time

+3

Suena genial. No necesito cambiar la hora del sistema. Es suficiente si cada dispositivo (que tiene mi aplicación instalada) calcula ese desplazamiento y, por lo tanto, puede funcionar con un tiempo de referencia común. – user1057534

2

No se puede confiar totalmente en la hora del GPS ya que hay un problema conocido para algunos dispositivos que el tiempo recuperado para algunos dispositivos es un día por delante. En ese caso, es posible que obtenga una compensación grande.

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 and Android 2.2 Devices Showing GPS date 1 Day Advance from 1st jan 2012

0

UTC no se deriva de GPS, APK anula GPS. Android configurado para ignorar el reloj GPS. Usted es getTime() es NIST. no GPS

+0

Si se supone que esto es una respuesta a la pregunta original, entonces necesita mejorarla. – DuncanKinnear