我真的不认为这个问题是重复的 类似问题的大多数答案都说使用System.currentTimeMillis()作为最准确的时间,但我注意到两个并排的Android设备可能相隔5秒或更长时间或(更重要的是)实时,我相信currentTimeMillis()将反映出这种差异。
所以我真正想要的是一个全面的解决方案,以便在特定时刻获得最强准确的时间。
例如,它将从GPS开始,如果不可用或没有信号,则回退到SNTP,或者如果不起作用请求Android通过其自己的SNTP或运营商NITZ刷新其挂钟。
我的目标是精确度在.1秒内
这可能吗?
感谢。
答案 0 :(得分:6)
这可能吗?
这取决于你对“那个”的定义。
所以,让我们先检查一下你的其他材料......
它将从GPS开始
GPS times are not especially accurate depending on hardware。我认为您还需要使用NmeaListener
来尝试直接解析NMEA句子中的时间数据,因为getTime()
上的AFAIK Location
是系统时间,而不是某些GPS时间。此外,请记住,GPS访问不是通用的(用户可能已经专门禁用它,用户可能已将设备置于飞行模式,用户可能在没有可用GPS信号的大型建筑物中)。 / p>
回归SNTP
您可以尝试使用大量SNTP客户端代码位。请记住,互联网连接不是通用的(设备可能只在任何已知接入点之外的WiFi,用户可能已将设备置于飞行模式,设备可能具有移动数据功能但在当前位置没有信号强度)。
如果不起作用,请让Android通过自己的SNTP或运营商NITZ来刷新挂钟
可以想象,根设备可能会以某种方式执行此操作,但Android SDK中没有任何内容可供普通应用程序强制进行此类刷新。请记住,连通性并不普遍(参见前一段中的名单)。
所以,回到:
这可能吗?
如果“that”是一个可以保证在所有情况下都能正常工作的解决方案,那么不可能,因为不能保证能够与任何时间源进行通信。
如果设备具有Internet连接,那么“that”是一个可以保证工作的解决方案,那么您需要询问您的SNTP客户端库实施者是否可以达到100ms的准确度。除了连接问题之外,SNTP是您完全由您控制的策略中唯一一个,因为GPS可能不准确,NITZ不是您自己管理的。