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

Я использую Raspberry Pi с ключом 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.

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


person user3235881    schedule 06.05.2016    source источник


Ответы (1)


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

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

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

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

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

person davidgyoung    schedule 06.05.2016