安卓系统是否使用NTP同步时间?

69

Android设备是否使用网络时间协议(NTP)同步时间?

在我的设备设置中,我看到一个带有“与网络同步”的复选框,但我不知道它们是否使用NTP。

我需要这个信息写本科论文,我使用GPS。为了获得精确的GPS信号,接收器应该有一个精确的时钟。

我在网上找到了这篇博客文章,但我不确定他是否说的是真的:加速Android中的NTP,GPS锁定

5个回答

57
我知道Android ICS使用了一个名为NetworkTimeUpdateService的自定义服务。该服务还通过NtpTrustedTime单例实现了NTP时间同步。
NtpTrustedTime中,默认的NTP服务器是从Android系统字符串源请求的。
final Resources res = context.getResources();

final String defaultServer = res.getString(
                                com.android.internal.R.string.config_ntpServer);

如果系统设置中勾选了自动时间同步选项,但没有可用的NITZ时间服务,则时间将与来自com.android.internal.R.string.config_ntpServer的NTP服务器同步。
要获取com.android.internal.R.string.config_ntpServer的值,可以使用以下方法:
    final Resources res = this.getResources();
    final int id = Resources.getSystem().getIdentifier(
                       "config_ntpServer", "string","android");
    final String defaultServer = res.getString(id);

16
有趣的是,它似乎已经硬编码为 2.android.pool.ntp.org。第820行:https://android.googlesource.com/platform/frameworks/base/+/40caf8f4432acd2b9d9230b2b1371660521415c2/core/res/res/values/config.xml#802 - Jeremy Logan
3
是的,但这仅适用于原生Android。一些制造商会更改服务器字符串。 - Dyonisos
10
注意:1)如果你想更改ntp服务器,Android只会在启动时查看config_ntpServer值,所以你需要重新启动(或重新启动NetworkTimeUpdateService)才能使用新值。2)自2012年以来,Android每次启动后仅每10天检查一次时间。(有一个gerrit中的补丁可以恢复原来的超时为1天)。3)让Android检查时间的技巧是将Settings.Global.AUTO_TIME切换关闭然后再打开。这相当于Settings.app中日期和时间部分的复选框。4)Android不使用NTP,它使用SNTP定期轮询。 - Harvey
3
当你说:“1)如果你想要改变ntp服务器,安卓系统只会在启动时查看config_ntpServer值,所以你需要重新启动(或重启NetworkTimeUpdateService)来使用新值”,你应该如何改变这个值呢? - Tobi

12
我想问一下,安卓设备是否使用网络时间协议(NTP)来同步时间。
对于一般的时间同步,具有电话功能的设备会使用NITZ信息,其中无线提供商提供。我的理解是,在其他情况下使用NTP:不支持NITZ的无线提供商,仅WiFi等。
您引用的博客文章提到了另一种情况:为支持GPS而进行的按需时间同步。这当然是可以想象的,但我不知道是否被使用。

10

我有一台搭载Android 4.1.1的三星Galaxy Tab 2 7.0平板电脑,似乎无法同步到网络时间协议(NTP)。我安装了一个应用程序,显示我的平板电脑比NTP晚20秒,但是如果不对设备进行Root(即取得超级用户权限),则无法进行校准。


1
似乎只能手动更新...我的每6个月增加1.5分钟。 - Fiasco Labs
1
Tab 2已经升级到Android 4.2.2,而且没有@Harvey在接受的答案评论中提到的复选框。我的设备时间有点不准确。下次无法记录时,我将尝试使用GPS同步。 - Mike C

7

虽然这不是你问题的确切答案,但以下信息或许会有所帮助:如果你的设备使用NTP来获取时间(比如一个没有3G或GPS功能的平板电脑),则服务器可以在/system/etc/gps.conf中进行配置。显然,只有拥有root权限才能编辑该文件,但非root设备也可以查看该文件。


好的,文件已经存在并且完整保存在我的三星Galaxy Tab S上。你知道我如何启用内置的NTP吗? - user2284570
1
@user2284570,我认为上面的一些答案会给你比我现在能提供的更好的信息。 - toryan
在 / 文件夹中没有 gps.conf 文件。可能的原因是什么?我的设备已经 root。 - Hilal
@Hilal 这个问题/答案已经有6年了,也许Android从那时起就发生了变化。很抱歉,我没有能力使这个答案保持最新。 - toryan

1
您可以通过全局变量NTP_SERVER、属性ro.NTP_SERVER或在/etc下创建一个名为ntp.conf的文件来覆盖ntp,具体请参见:https://developers.google.com/time/guides#linux_ntpd_or_chrony。Linux指令适用于Android系统。
您可以将设备上的流量重定向到代理,然后在同一网络中运行的burp数据包监听器上进行检查,以轻松检查所有流量。无论NTP设置如何,您设备中的SIM卡都会同步,而默认情况下,您的路由器也可能作为网络的NTP服务器。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接