Синхронизировать устройства Android по времени GPS? - PullRequest
20 голосов
/ 21 ноября 2011

Короткая версия:

Проблема: мне нужно несколько устройств Android, чтобы сделать что-то в одно и то же время (в течение примерно 100 миллисекунд).Например, я хочу, чтобы все устройства воспроизводили определенный звук в ранее определенный момент времени.

Вопрос: Могу ли я использовать время GPS, чтобы убедиться, что часы устройств синхронизированы?

Более длинная версия:

Несколько человек с устройствами Android находятся в одном и том же месте на улице (для какого-то конкретного спортивного мероприятия).Все устройства должны сигнализировать об определенных событиях в одно и то же время.(Какое время будет определено заранее, и не важно, что они делают это точно в это время, если они делают это одновременно).FWIW: эти события помогут людям начать свою спортивную деятельность в одно и то же время.

Вот некоторые предположения, которые я могу сделать:

  • Может быть или не быть покрытие сотовой связи.(Это на улице и может быть далеко от городских районов)
  • Устройства могут быть или не быть подключены к Интернету.(У некоторых людей может не быть плана данных)
  • Устройства могут общаться друг с другом.Если устройства не подключены к Интернету, они будут подключены через Wi-Fi (хотя Wi-Fi может не иметь интернет-шлюза).
  • Устройства находятся снаружи (а не внутри зданий).(Это хорошо, это означает, что все устройства могут получить исправление GPS)
  • Устройства физически расположены близко друг к другу (то есть в пределах 300 м2).(Не уверен, что это важно)

Я не могу использовать внутренние часы, чтобы знать, когда воспроизводить события: пользователи могут вручную изменять время и даже если устройство настроено на получение времени из сотовой сети.эта сеть может не обеспечивать точное время.Два устройства могут быть зарезервированы в разных сетях, и, следовательно, их время может не синхронизироваться очень хорошо.

При запуске приложения каждое устройство может запросить исправление GPS и сохранить разницу между временем GPS и его внутренними часами.Теперь мастер может объявлять события на основе этого времени GPS (используя свои внутренние часы и вычитая смещение, сохраненное ранее).

Будет ли это достаточно точным и надежным?

Заранее большое спасибоАндреас Лейтнер

Ответы [ 3 ]

13 голосов
/ 21 ноября 2011

Вы можете получить разницу во времени в миллисекундах от currentTimeMillis() и Location.getTime() в обратном вызове onLocationChanged().Используйте requestSingleUpdate()


Я просто хочу добавить, что если у пользователя есть подключение для передачи данных, он может использовать время NTP, что еще точнее, в качестве внутренних часов GPSможет дрейфовать и исправлять это нужно некоторое время.


РЕДАКТИРОВАТЬ: Я хочу редактировать этот ответ.Поработав разработчиком GNSS в ОС Android, я понял, что многие «крупные» OEM-производители Android все испортили.Обычно предложения NMEA генерируются на чипсете или в стеке GNSS.Иногда время подходит, это зависит от реализации.

Также существует проблема високосной секунды.Время GPS не время UTC.И на момент написания это на 18 секунд впереди .

Также время GPS от Location объектов теперь является системным временем согласно документации

TLDR: используйте Время NTP

2 голосов
/ 23 октября 2012

Вы не можете полностью полагаться на время GPS, поскольку для некоторых устройств существует известная проблема, заключающаяся в том, что время, полученное для некоторых устройств, составляет один день вперед. В этом случае вы можете получить большое смещение.

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

Обходной путь для решения этой проблемы обсуждался здесь: Android: вкладки Samsung Galaxy и устройства Android 2.2 с указанием даты GPS 1 день вперед с 1 января 2012 года

0 голосов
/ 13 июля 2015

UTC не получен из GPS, APK переопределяет GPS.Android настроен на игнорирование GPS-часов.Вы getTime () является NIST.не GPS

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...