同步 android 应用程序和服务器之间的时间
Synchronize the time between an android app and a server
我使用 raspberry pi 和蓝牙加密狗来模拟信标。当我在覆盆子中更改信标时,我想测量移动应用程序检测信标 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
在我更改信标的 ID 之前,我打印了时间
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.
处检测到
这是同步问题吗?有更好的方法吗?
一些想法:
如果有网络连接,Android 设备和 Pi 默认情况下都会自动将它们的时间同步到 NTP 服务器。你不应该做任何事情。
NTP 守护程序并不总是立即更改时钟——它会随着时间的推移缓慢调整时钟,以免立即跳转扰乱 linux 进程。由于 Raspberry Pi 没有实时时钟,它在启动时总是有错误的时间。启动后您可能需要等待几分钟才能与 Android 设备同步。
NTP 并不完美。使用 Internet 时间服务器时,不要指望将时钟同步到超过几十毫秒。由于蓝牙检测时间可能非常快(也在 10 毫秒的范围内),如果您的检测时间为 -100 毫秒,这可能在此设置的限制范围内。
您显示的是大约-1.0 秒的检测时间。这表明时间没有很好地同步。我会怀疑 Pi 是问题所在并在那里进行故障排除。在两个设备上并排显示精确到毫秒的时间可能有助于排除故障。
我使用 raspberry pi 和蓝牙加密狗来模拟信标。当我在覆盆子中更改信标时,我想测量移动应用程序检测信标 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
在我更改信标的 ID 之前,我打印了时间
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.
处检测到这是同步问题吗?有更好的方法吗?
一些想法:
如果有网络连接,Android 设备和 Pi 默认情况下都会自动将它们的时间同步到 NTP 服务器。你不应该做任何事情。
NTP 守护程序并不总是立即更改时钟——它会随着时间的推移缓慢调整时钟,以免立即跳转扰乱 linux 进程。由于 Raspberry Pi 没有实时时钟,它在启动时总是有错误的时间。启动后您可能需要等待几分钟才能与 Android 设备同步。
NTP 并不完美。使用 Internet 时间服务器时,不要指望将时钟同步到超过几十毫秒。由于蓝牙检测时间可能非常快(也在 10 毫秒的范围内),如果您的检测时间为 -100 毫秒,这可能在此设置的限制范围内。
您显示的是大约-1.0 秒的检测时间。这表明时间没有很好地同步。我会怀疑 Pi 是问题所在并在那里进行故障排除。在两个设备上并排显示精确到毫秒的时间可能有助于排除故障。