2011-11-21 13 views
19

Krótka wersja:Synchronizacja urządzeń z Androidem przez czas GPS?

Problem: Potrzebuję kilku urządzeń Android zrobić coś dokładnie w tym samym czasie (w ciągu około 100 milisekund). Na przykład chcę, aby wszystkie urządzenia odtwarzały określony dźwięk w określonym wcześniej momencie.

Pytanie: Czy mogę użyć czasu GPS, aby upewnić się, że zegary urządzeń są zsynchronizowane?

Dłuższa wersja:

Kilka osób posiadających urządzenia Android są w tym samym miejscu (na zewnątrz jakiegoś konkretnego wydarzenia sportowego). Wszystkie urządzenia powinny sygnalizować określone zdarzenia dokładnie w tym samym czasie. (Która godzina zostanie ustalona przed rozdaniem i nie jest ważne, aby robili to dokładnie w tym samym czasie, o ile robią to w tym samym czasie). FWIW: te wydarzenia pomogą ludziom rozpocząć aktywność sportową w tym samym czasie.

Oto założenia mogę zrobić:

  • Nie mogą lub nie mogą być zasięg komórkowy. (Jest na zewnątrz i może być daleko od obszarów miejskich).
  • Urządzenia mogą być podłączone do Internetu lub mogą nie być podłączone. (Niektóre osoby mogą nie mieć abonamentu danych)
  • Urządzenia mogą ze sobą rozmawiać. Jeśli urządzenia nie są podłączone do Internetu, będą połączone za pośrednictwem Wi-Fi (choć w Wifi może nie być bramy internetowej).
  • Urządzenia są na zewnątrz (a nie wewnątrz budynków). (To dobrze, oznacza to, że wszystkie urządzenia mogą uzyskać naprawę GPS).
  • Urządzenia są fizycznie blisko siebie (tj. W obrębie 300 m2). (Nie wiem, czy to ważne)

Nie mogę korzystać z wewnętrznego zegara, aby wiedzieć, kiedy grać zdarzeń: użytkownicy mogą ręcznie zmienić czas i nawet jeśli urządzenie jest ustawione, aby uzyskać czas od sieci komórkowej, że sieć może nie podać dokładnego czasu. Dwa urządzenia mogą być rezerwowane w różnych sieciach, więc ich czas może nie być zsynchronizowany bardzo dobrze.

Podczas uruchamiania aplikacji każde urządzenie może poprosić o naprawę GPS i zapisać różnicę między czasem GPS a jego zegarem wewnętrznym. Teraz mistrz może ogłaszać zdarzenia w oparciu o ten czas GPS (używając wewnętrznego zegara i odejmując przesunięcie, które zostało wcześniej zapisane).

Czy będzie to wystarczająco dokładne i wiarygodne?

Dziękujemy wcześniej, Andreas Leitner

+0

można używać aplikacji Czas GPS z rynku https://market.android.com/details?id=net.sourcewalker.gpstime – andreasg

+0

To świetny pomysł. Mogę użyć tej aplikacji, aby wypróbować, czy działa. Ostatecznie chciałbym jednak zbudować tę funkcjonalność w mojej aplikacji. Nie chcę prosić moich użytkowników o zainstalowanie innej aplikacji (nawet jeśli jej nie potrzebują), a nawet bardziej problematycznej, która wymaga uprawnień administratora. – user1057534

+0

Witam, dążę do tego samego. Czy kiedykolwiek byłeś w stanie to osiągnąć? –

Odpowiedz

13

można uzyskać różnicę czasu w milisekundach od currentTimeMillis() i Location.getTime() w onLocationChanged() zwrotnego. Użyj requestSingleUpdate()


Chcę tylko dodać, że jeśli użytkownik ma połączenie danych mogą wykorzystać czas NTP, która jest jeszcze bardziej dokładne, ponieważ wewnętrzny zegar GPS może dryfować i korygowanie to zajmuje trochę czasu.


EDIT: chcę edytować tę odpowiedź.Po pracy jako programista GNSS w systemie operacyjnym Android zdałem sobie sprawę, że wielu "poważnych" producentów OEM Androida zawiodło ten problem. Zwykle zdania NMEA są generowane na chipsecie lub stosie GNSS. Czasami czas jest właściwy, zależy to od implementacji.

Występuje również problem sekundy przestępnej. Czas GPS nie jest czasem UTC. I od tego writing it is 18 seconds ahead.

GPS Także razem z Location obiektów są teraz czas systemowy zgodnie z dokumentacją

TLDR: użyj NTP time

+3

Brzmi świetnie. Nie potrzebuję zmieniać czasu systemowego. Wystarczy, że każde urządzenie (które ma zainstalowaną moją aplikację) oblicza to przesunięcie, a tym samym może pracować ze wspólnym czasem odniesienia. – user1057534

0

UTC nie pochodzi z GPS, APK nadpisuje GPS. System Android zignorował zegar GPS. Jesteś getTime() jest NIST. nie GPS

+0

Jeśli ma to być odpowiedź na oryginalne pytanie, musisz je poprawić. – DuncanKinnear

Powiązane problemy