简短版:
问题:我需要几台Android设备在同一时间(大约100毫秒内)执行某些操作。例如,我希望所有设备在之前确定的时间点播放某种声音。
问题:我可以使用GPS时间确保设备时钟同步吗?
更长的版本:
有几个拥有Android设备的人都在同一个室外位置(某些特定的体育赛事)。所有设备应在同一时间发出某些事件的信号。 (事先确定什么时间,只要他们同时这样做,他们在那个时间完成它并不重要)。 FWIW:这些活动将帮助人们同时开展体育活动。
以下是我可以做出的假设:
我无法使用内部时钟知道何时播放事件:用户可以手动更改时间,即使设备设置为从蜂窝网络获取时间,该网络也可能无法提供正确的时间。两台设备可能被预订到不同的网络中,因此它们的时间可能无法很好地同步。
在应用启动时,每台设备都可以要求GPS修复并保存GPS时间与其内部时钟之间的差异。现在,主人可以根据这个GPS时间宣布事件(通过使用它的内部时钟并减去它之前保存的偏移量。)
这是否足够精确可靠?
非常感谢, 安德烈亚斯莱特纳
答案 0 :(得分:13)
您可以在Location.getTime()
回调中获得currentTimeMillis()
和onLocationChanged()
的时差(以毫秒为单位)。使用requestSingleUpdate()
我只想补充一点,如果用户有数据连接,他们可以使用NTP时间,这更准确,因为GPS内部时钟可能会漂移并纠正它需要一段时间。
编辑: 我想编辑这个答案。在作为Android操作系统的GNSS开发人员工作后,我意识到许多“主要”Android OEM已经搞砸了。 通常在芯片组或GNSS堆栈处生成NMEA语句。有时候时间是对的,这取决于实施。
还有闰秒问题。 GPS时间不是UTC时间。从此writing it is 18 seconds ahead开始。
根据文档
,来自Location
对象的GPS时间现在是系统时间
TLDR:使用NTP time
答案 1 :(得分:2)
您不能完全依赖GPS时间,因为某些设备存在一个已知问题,即某些设备检索的时间提前一天。在这种情况下,您可能会获得很大的抵消。
http://code.google.com/p/android/issues/detail?id=23937
此处讨论了解决此问题的解决方法: Android : Samsung Galaxy Tabs and Android 2.2 Devices Showing GPS date 1 Day Advance from 1st jan 2012
答案 2 :(得分:0)
UTC不是来自GPS,APK会覆盖GPS。 Android设置忽略GPS时钟。你是getTime()是NIST。不是GPS