同步Android应用程序和服务器之间的时间

时间:2016-05-06 13:35:33

标签: linux raspberry-pi ibeacon ibeacon-android ntpd

我使用带有蓝牙适配器的树莓派来模拟灯塔。我想测量移动应用程序在覆盆子中更改它时检测信标的UUID所需的时间。通过这段代码,我找到了智能手机用来同步磁贴的服务器

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

比我用树莓派同步时间

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

在更改信标的ID之前,我打印时间

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


timestamp # print timestamp

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

然后我比较了我第一次看到UUID时改变UUID的时间和logcat中的时间,结果总是负面的 UUID在15:33:03,276更改,并在15:33:02.301检测到。

这是同步问题吗?有更好的方法吗?

1 个答案:

答案 0 :(得分:1)

一些想法:

  • 默认情况下,Android设备和Pi都会自动将时间同步到NTP服务器(如果他们有网络连接)。你不应该做任何事情。

  • NTP守护程序并不总是立即更改时钟 - 它会随着时间的推移缓慢调整它,以免通过立即跳转来扰乱linux进程。由于Raspberry Pi没有实时时钟,因此启动时总是有不正确的时间。在与Android设备同步之前,您可能需要在启动后等待几分钟。

  • NTP并不完美。在使用互联网时间服务器时,不要期望让您的时钟同步到超​​过几十毫秒。由于蓝牙检测时间可以非常快(也在10毫秒的范围内),如果您的检测时间为-100毫秒,则可能在此设置的限制范围内。

您所展示的是大约-1.0秒的检测时间。这表明时间不太好。我怀疑Pi是问题并在那里排除故障。在两台设备上并排显示毫秒级的时间进行故障排除可能会有所帮助。