Синхронизация временных меток на нескольких устройствах

Я пытаюсь синхронизировать временные метки между несколькими устройствами Android, поэтому я могу одновременно запустить задачу. Я полагаю, что я могу использовать Таймер и установить дату на основе System.currentTimeMillis (), но проблема заключается в том, что временные метки нескольких устройств достаточно далеки друг от друга, что я не получаю точность, которую я хочу.

Я смотрю где-то в диапазоне 50-100 мс, если это возможно. Одна из моих идей заключалась в том, чтобы использовать Android Beam для отправки метки времени одного устройства на другое устройство, а затем вычислить дельта, но оказалось, что мне нужно получить метку времени до того, как сообщение действительно отправлено и получено (т. Е. Чем дольше пользователь Ждет отправки, тем больше будет дельта), что делает эту схему полностью разваливающейся.

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

Также приветствуются любые другие предложения о методах делать что-то на нескольких устройствах как можно ближе друг к другу.

Почему бы не использовать время GPS? Временные метки от GPS довольно точны.

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

По сути, у вас есть два варианта: простой способ или трудный путь.

Простым способом является использование одного внешнего источника для сигналов времени, таких как NIST , другой интернет-источник или GPS, как предлагает @Stefan. Источники Интернета используют NTP, см. Этот вопрос клиента Java NTP .

Трудным способом является синхронизация часов между устройствами.

Сейчас я борюсь с той же проблемой. Я пробовал gps-время, но я не могу гарантировать, что у пользователя будет сигнал gps в помещении.

Мое решение состояло в том, чтобы все устройства извлекали время с сервера nist, а затем просто добавляли или вычитали разницу во времени с помощью System.currentTimeMillis ()

Если устройства укоренены, вы можете попытаться синхронизировать часы.

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

Оборудование Android GPS обычно имеет только секундную точность. Три последние цифры времени миллисекундного числа с плавающей запятой – 000.