2013-08-19 20 views
8

Ich versuche, die Zeitstempel zwischen mehreren Android-Geräten zu synchronisieren, damit ich gleichzeitig eine Aufgabe starten kann. Ich stelle fest, dass ich Timer verwenden und ein Datum basierend auf System.currentTimeMillis() festlegen kann, aber das Problem scheint zu sein, dass die Zeitstempel mehrerer Geräte gerade weit genug voneinander entfernt sind, dass ich nicht die Präzision bekomme, die ich möchte.Zeitstempel über mehrere Geräte synchronisieren

Ich schaue irgendwo im Bereich von 50-100 ms, wenn möglich. Eine Idee war, Android Beam zu verwenden, um den Zeitstempel eines Geräts an das andere Gerät zu senden und dann ein Delta zu berechnen, aber es stellt sich heraus, dass ich den Zeitstempel abrufen muss, bevor die Nachricht tatsächlich gesendet und empfangen wird (dh je länger ein Benutzer ist) wartet, um zu senden, desto größer wird das Delta sein), wodurch dieses Schema vollständig auseinander fällt.

Wie kann ich zwei oder mehr Geräte synchronisieren, so dass ihre internen Uhren nicht mehr als 100 ms voneinander entfernt sind? Ist das überhaupt möglich, ohne einen externen Server zu verwenden, der die Zeit hält?

Alle anderen Vorschläge für Techniken, um etwas über mehrere Geräte gleichzeitig möglichst gleichzeitig zu tun, wären ebenfalls willkommen.

Antwort

4

Warum nicht die GPS-Zeit verwenden? Die Zeitmarken von GPS sind ziemlich genau.

Sie könnten alle Geräte zu einer bestimmten Zeit vereinbaren und dann starten, wenn das GPS es Ihnen sagt.

+1

Ich habe versucht, den GPS-Standort zu verwenden. Ich kann es bekommen und das Delta einstellen, und obwohl ich die Synchronisierung noch nicht heruntergefahren habe, weiß ich nicht, ob das machbar ist. Bei meinen praktischen Tests musste ich manchmal eine Minute auf ein GPS-Signal warten. Nicht zu vergessen, das wäre eine weitere erforderliche Erlaubnis für die App. Ich werde weiterhin die GPS-Zeit-Methode für jetzt verwenden und sehen, ob ich ein Synchronisationsschema ausarbeiten kann, das funktioniert, aber ich weiß nicht, ob die Verwendung von GPS auf lange Sicht zuverlässig sein wird. –

0

Ich habe gerade mit dem gleichen Problem zu kämpfen. Ich habe versucht, GPS-Zeit, aber ich kann nicht garantieren, dass der Benutzer GPS-Signal drinnen haben wird.

Meine Lösung war, haben alle Geräte die Zeit von einem NIST-Server abrufen und dann einfach hinzufügen oder die Zeitdifferenz mit System.currentTimeMillis subtrahieren()

Wenn die Geräte verwurzelt Sie könnten versuchen, die Uhren zu synchronisieren.

https://play.google.com/store/apps/details?id=ru.org.amip.ClockSync&hl=en

2

Im Wesentlichen haben Sie zwei Möglichkeiten: die einfache Art und Weise oder auf die harte Weise.

Der einfache Weg ist, eine einzige externe Quelle für Zeitsignale zu verwenden, wie NIST, eine andere Internetquelle oder GPS, wie @Stefan vorschlägt. Internetquellen verwenden NTP, siehe Java NTP client Frage.

Der harte Weg ist Clock synchronization zwischen den Geräten zu tun.

0

Android GPS-Hardware haben in der Regel nur Sekunden Genauigkeit. Die drei letzten Zeitstempel-Ziffern der Millisekunden-Gleitkommazahl sind 000.

Verwandte Themen