it-swarm.com.de

Android-Geräte über GPS-Zeit synchronisieren?

Kurzfassung:

Problem: Ich benötige mehrere Android-Geräte, um genau zur gleichen Zeit (innerhalb von ca. 100 Millisekunden) etwas zu tun. Ich möchte zum Beispiel, dass alle Geräte zu einem vorher festgelegten Zeitpunkt einen bestimmten Ton wiedergeben.

Frage: Kann ich mithilfe der GPS-Zeit sicherstellen, dass die Uhrzeit des Geräts synchronisiert ist?

Längere Version:

Mehrere Personen mit Android-Geräten befinden sich im selben Außenbereich (für bestimmte Sportereignisse). Alle Geräte sollten bestimmte Ereignisse genau zur gleichen Zeit melden. (Welche Zeit wird vorab festgelegt und es ist nicht wichtig, dass sie es genau zu dieser Zeit tun, solange sie es gleichzeitig tun). FWIW: Diese Veranstaltungen werden den Menschen helfen, gleichzeitig ihre sportliche Tätigkeit aufzunehmen.

Hier sind Annahmen, die ich machen kann:

  • Es kann eine Zellabdeckung geben oder nicht. (Es ist im Freien und kann von städtischen Gebieten entfernt sein)
  • Die Geräte können mit dem Internet verbunden sein oder nicht. (Einige Personen haben möglicherweise keinen Datenplan.)
  • Geräte können miteinander sprechen. Wenn die Geräte nicht mit dem Internet verbunden sind, werden sie über WLAN verbunden (obwohl das WLAN möglicherweise kein Internet-Gateway hat).
  • Die Geräte befinden sich außerhalb (und nicht innerhalb von Gebäuden). (Das ist gut, es bedeutet, dass alle Geräte einen GPS-Fix bekommen können.)
  • Die Vorrichtungen sind physisch nahe beieinander (d. H. Innerhalb von 300 m 2). (Nicht sicher, ob das wichtig ist)

Ich kann die interne Uhr nicht verwenden, um zu wissen, wann Ereignisse abgespielt werden sollen: Benutzer können die Uhrzeit manuell ändern, und selbst wenn ein Gerät so eingestellt ist, dass es die Uhrzeit von einem Mobilfunknetz abruft, liefert dieses Netzwerk möglicherweise nicht die genaue Uhrzeit. Zwei Geräte sind möglicherweise in verschiedenen Netzwerken gebucht und daher wird ihre Zeit möglicherweise nicht gut synchronisiert.

Beim Start der App kann jedes Gerät nach einem GPS-Fix fragen und die Differenz zwischen der GPS-Zeit und der internen Uhr speichern. Der Master konnte nun Ereignisse basierend auf dieser GPS-Zeit melden (indem er die interne Uhr verwendete und den zuvor gespeicherten Versatz subtrahierte).

Wird dies präzise genug und zuverlässig sein?

Vielen Dank im Voraus, Andreas Leitner

20
user1057534

Sie können die Zeitdifferenz in Millisekunden von currentTimeMillis() und Location.getTime() im Rückruf onLocationChanged() abrufen. Benutze requestSingleUpdate()


Ich möchte nur hinzufügen, dass der Benutzer, wenn er eine Datenverbindung hat, die NTP -Zeit verwenden kann, was noch genauer ist, da die interne GPS-Uhr möglicherweise driftet und die Korrektur eine Weile dauert.


EDIT: Ich möchte diese Antwort bearbeiten. Nachdem ich als GNSS-Entwickler in Android OS gearbeitet hatte, stellte ich fest, dass viele 'große' Android-OEMs dies vermasselt haben. Normalerweise werden NMEA-Sätze auf dem Chipsatz oder im GNSS-Stack generiert. Manchmal ist die Zeit richtig, es hängt von der Implementierung ab.

Auch gibt es ein Problem der Schaltsekunde. Die GPS-Zeit ist keine UTC-Zeit. Und ab diesem Schreiben sind es 18 Sekunden .

Auch die GPS-Zeit von Location-Objekten entspricht jetzt der Systemzeit gemäß der Dokumentation

TLDR: benutze NTP Zeit

13
Reno

Sie können sich nicht vollständig auf die GPS-Zeit verlassen, da bei einigen Geräten ein bekanntes Problem vorliegt, dass die für einige Geräte abgerufene Zeit einen Tag voraus ist. In diesem Fall erhalten Sie möglicherweise einen großen Versatz.

http://code.google.com/p/Android/issues/detail?id=23937

Eine Problemumgehung zur Behebung dieses Problems wurde hier erörtert: Android: Samsung Galaxy Tabs und Android 2.2-Geräte mit GPS-Datum 1 Tag vor dem 1. Januar 2012

2
muneikh

UTC wird nicht von GPS abgeleitet, APK überschreibt GPS. Android ignoriert die GPS-Uhr. Du bist getTime () ist NIST. kein GPS

0
Joel Thacker