我真的不认为这个问题是重复的。
类似问题的大多数答案都说使用 System.currentTimeMillis() 作为最准确的时间,但我注意到并排的两个 Android 设备可能会彼此相差 5 秒或更长时间,或者(更重要的是)实时,我相信 currentTimeMillis() 将反映这种差异。
所以我真正寻找的是一个全面的解决方案来充分利用accurate给定时刻可能的时间。
例如,它会从 GPS 开始,如果 GPS 不可用或没有信号,则回退到 SNTP,或者如果不起作用,则要求 Android 通过自己的 SNTP 或运营商 NITZ 刷新其挂钟。
我的目标是 0.1 秒内准确。
那可能吗?
Thanks.
那可能吗?
这取决于你对“那个”的定义。
那么,让我们先检查一下其余的材料......
它将从 GPS 开始
GPS 时间并不是特别准确,具体取决于硬件。我想你还需要使用NmeaListener
尝试直接从 NMEA 句子中解析时间数据,据我所知getTime()
on Location
是系统时间,而不是某些 GPS 时间。另外,请记住,GPS 访问并不通用(用户可能已专门禁用它,用户可能已将设备置于飞行模式,用户可能位于没有可用 GPS 信号的大型建筑物中)。
回退到 SNTP
有很多 SNTP 客户端代码可供您尝试。请记住,互联网连接不是通用的(设备在任何已知接入点之外可能仅支持 WiFi,用户可能已将设备置于飞行模式,设备可能具有移动数据功能,但在当前位置没有信号强度)。
如果这不起作用,请要求 Android 通过自己的 SNTP 或运营商 NITZ 刷新其挂钟
可以想象,取得 root 权限的设备可能能够以某种方式执行此操作,但 Android SDK 中没有任何内容可供普通应用程序强制执行此类刷新。请记住,连接性并不普遍(请参阅上一段中的名册)。
那么,回到:
那可能吗?
如果“那个”是保证在所有情况下都有效的解决方案,那么不,这是不可能的,因为不能保证您具有与任何时间源进行通信的能力。
如果“那个”是一个在设备有互联网连接的情况下保证工作的解决方案,那么您需要询问您的 SNTP 客户端库实现者是否可以达到 100 毫秒的精度。除了连接问题之外,SNTP 是唯一完全由您控制的策略,因为 GPS 可能不准确,并且 NITZ 不是您自己管理的东西。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)