Синхронизировать время между приложением 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 секунды. Это говорит о том, что время не синхронизировано хорошо. Я подозреваю, что проблема в Пи, и устраню неполадки там. Может быть полезно показывать время до миллисекунды на обоих устройствах рядом для устранения неполадок.