在搜索互联网并在这里询问之后。我发现从 simcard 获取准确时间的解决方案是使用名为 NITZ(网络身份和时区)的服务,当用户在设置中指定“自动时间同步”时,android 使用该服务来设置时间。
我很想知道如何实现这样的事情并在我的应用程序中使用它来获得准确的时间。
看来android使用一种名为“revertToNitz()”的方法来同步时间。
我也想用。我很感激任何帮助。
3 回答
我很想知道如何实现这样的事情并在我的应用程序中使用它来获得准确的时间。
这是由操作系统自动处理的。只需使用System.currentTimeMillis()
或任何其他标准 Java 方式来获取时间。应用程序无法访问来自运营商的 NITZ 信号。
看来android使用一种名为“revertToNitz()”的方法来同步时间。
Android SDK 中没有revertToNitz()
,我什至在源代码中也没有看到。
它由 Android 操作系统实现。如果用户打开了“自动时间”选项,您将只需使用标准系统时间相关 API 即可获得准确的 NITZ 或 NTP 时间。你不必再担心它了。
并且在 ServiceStateTracker.java 中实现了 revertToNitzTime() 函数。当手机收到 NITZ 时,无论用户是否打开“自动时间”选项,Android 都会将此报告的时间缓存在 NITZ 中。当此选项稍后打开时,其缓存值将应用于系统时钟。此操作称为“revertToNitzTime”。
系统时间不仅受 NITZ 影响,还受 NTP 时间影响。甚至 GPS 时间也包含在某些第 3 方 Android 系统中。
Android(NITZ)中通过蜂窝网络设置时间由操作系统实现。检查这里http://androidxref.com/4.4.2_r2/xref/frameworks/base/services/java/com/android/server/NetworkTimeUpdateService.java