我真的不认为这个问题是重复的。
大多数类似问题的答案都说使用System.currentTimeMillis()作为最准确的时间,但是我注意到两个并排的Android设备可能彼此之间的间隔可能长达5秒或更长时间,或者(更重要的是)实时,我相信currentTimeMillis()会反映出这种差异。
因此,我真正想要的是一种全面的解决方案,以在给定的时刻获得最准确的时间。
例如,它将从GPS开始,如果不可用或没有信号,则退回到SNTP,或者如果这不起作用,请Android通过其自己的SNTP或运营商NITZ刷新挂钟。
我的目标是在0.1秒内达到准确度。
那可能吗?
谢谢。
那可能吗?
那取决于您对“那个”的定义。
因此,让我们首先检查您的其余材料...
它将从GPS开始
GPS时间不是特别精确,具体取决于硬件。我认为您还需要使用anNmeaListener
来尝试直接从NMEA语句中解析时间数据,因为AFAIKgetTime()
开启Location
是系统时间,而不是GPS时间。另外,请记住,GPS接入不是通用的(用户可能已将其禁用, 用户可能已将设备置于飞行模式, 用户可能在没有可用GPS信号的大建筑物中)。
退回到SNTP
您可以尝试许多SNTP客户端代码位。请记住,互联网连接不是通用的(设备可能在任何已知的接入点之外仅是WiFi,用户可能已将设备置于飞行模式,设备可能具有移动数据功能,但在当前位置没有信号强度)。
如果这样不起作用,请Android通过自己的SNTP或运营商NITZ刷新壁钟
可以想象,有根设备可以某种方式执行此操作,但是Android SDK中没有针对普通应用程序强制执行此类刷新的操作。请记住,连接不是通用的(请参见上段中的花名册)。
因此,回到:
那可能吗?
如果“ that”是可以在所有情况下都可以使用的解决方案,那么不能,这是不可能的,因为不能保证您可以与任何时间源进行通信。
如果“那”是可以保证设备具有Internet连接的解决方案,那么您需要询问SNTP客户端库实现者是否可以达到100ms的精度。除了连接性问题外,SNTP是您完全可以控制的唯一策略之一,因为GPS可能不准确,NITZ也不是您自己管理的东西。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句