2013-08-19 12 views
8

Próbuję zsynchronizować sygnatury czasowe między wieloma urządzeniami z Androidem, aby móc uruchomić zadanie w tym samym czasie. Myślę, że mogę użyć Timer i ustawić datę na podstawie System.currentTimeMillis(), ale problem wydaje się, że znaczniki czasu wielu urządzeń są na tyle daleko od siebie, że nie otrzymuję precyzji, którą chcę.Synchronizuj znaczniki czasu na wielu urządzeniach

Patrzyłem gdzieś w zakresie 50-100 ms, jeśli to możliwe. Jednym z pomysłów było użycie Android Beam do wysłania znacznika czasu jednego urządzenia do drugiego urządzenia, a następnie obliczenie delty, ale okazało się, że muszę uzyskać znacznik czasu zanim wiadomość zostanie faktycznie wysłana i odebrana (tj. Im dłuższy użytkownik czeka na wysłanie, tym większa będzie delta), co powoduje, że schemat całkowicie się rozpada.

Jak mogę zsynchronizować dwa lub więcej urządzeń, aby ich zegary wewnętrzne nie były oddalone o więcej niż 100 ms od siebie? Czy jest to możliwe bez korzystania z zewnętrznego serwera, który trzyma czas?

Wszelkie inne sugestie dotyczące technik robienia czegoś na wielu urządzeniach tak blisko, jak to tylko możliwe, byłyby również mile widziane.

Odpowiedz

4

Dlaczego nie skorzystać z czasu GPS? Znaczniki czasu z GPS są dość dokładne.

Możesz uzgodnić wszystkie urządzenia na określony czas, a następnie uruchomić je, gdy system GPS Ci o tym powiadomi.

+1

Próbowałem użyć lokalizacji GPS. Mogę to zrobić i ustawić deltę, i chociaż nie mam jeszcze synchronizacji, nie wiem, czy to będzie możliwe. Podczas moich praktycznych testów musiałem czekać z minutą nawet na sygnał GPS. Nie wspominając, że będzie to kolejne wymagane zezwolenie dla aplikacji. Będę w dalszym ciągu używać metody czasu GPS i zobaczę, czy mogę opracować schemat synchronizacji, który działa, ale nie wiem, czy korzystanie z GPS będzie niezawodne na dłuższą metę. –

0

Obecnie zmagam się z tym samym problemem. Próbowałem GPS, ale nie mogę zagwarantować, że użytkownik będzie miał sygnał GPS w pomieszczeniu.

Moje rozwiązanie było mieć wszystkie urządzenia pobierać czas z serwera NIST a potem po prostu dodać lub odjąć różnicę czasu z System.currentTimeMillis()

Jeśli urządzenia są zakorzenione można spróbować zsynchronizować zegary.

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

2

Zasadniczo, masz dwie możliwości: prosty sposób lub w przykry sposób.

Prostym sposobem jest użycie jednego zewnętrznego źródła sygnałów czasowych, takiego jak NIST, innego źródła internetowego lub GPS, jak sugeruje @Stefan. Źródła internetowe korzystają z NTP, patrz pytanie: Java NTP client.

Trudnym sposobem jest wykonanie Clock synchronization między urządzeniami.

0

Sprzęt GPS systemu Android generalnie ma tylko sekundową precyzję. Trzy ostatnie cyfry znacznika czasu liczby milisekund wynoszą 000.

Powiązane problemy