Синхронизировать время между приложением Android и сервером

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

final Resources res = this.getResources();
        final int id = Resources.getSystem().getIdentifier(
                "config_ntpServer", "string","android");
        final String defaultServer = res.getString(id); 

Чем я синхронизировал время в Raspberry Pi с

sudo ntpdate -u 2.android.pool.ntp.org

Прежде чем изменить идентификатор маяка, я печатаю время

timestamp() {
  date +"%T,%3N"
}


timestamp # print timestamp

sudo hcitool -i hci0 cmd 0x08 0x0008 1e 02 01 1.....

Затем я сравниваю время, когда я изменил UUID, и время в logcat, когда UUID был замечен впервые, и результат всегда отрицательный, UUID изменился в 15:33:03,276 и обнаружен в 15:33:02.301.

Это проблема синхронизации? Есть лучший способ сделать это?

1 ответ

Решение

Несколько мыслей:

  • Как устройство Android, так и Pi по умолчанию автоматически синхронизируют свое время с NTP-сервером, если они подключены к сети. Вы не должны ничего делать.

  • Демон NTP не всегда сразу меняет часы - он медленно настраивает их, чтобы не расстраивать процессы linux немедленным скачком. Так как Raspberry Pi не имеет часов реального времени, у него всегда неправильное время при загрузке. Возможно, вам придется подождать несколько минут после загрузки, чтобы синхронизировать ее с устройством Android.

  • НТП не идеален. Не ожидайте, что ваши часы будут синхронизированы с точностью до нескольких десятков миллисекунд при использовании интернет-серверов времени. Поскольку время обнаружения Bluetooth может быть очень коротким (также в диапазоне 10 с, миллисекунд), если вы получаете время обнаружения -100 мс, это может быть в пределах этой настройки.

То, что вы показываете, это время обнаружения около -1,0 секунды. Это говорит о том, что время не синхронизировано хорошо. Я подозреваю, что проблема в Пи, и устраню неполадки там. Может быть полезно показывать время до миллисекунды на обоих устройствах рядом для устранения неполадок.

Другие вопросы по тегам