简短版本:
问题:我需要几个Android设备在完全相同的时间(大约100毫秒内)做一些事情。例如,我希望所有设备都能在预先确定的时间点播放某个声音。
问:我可以使用GPS时间来确保设备的时钟同步吗?
较长版本:
几个拥有Android设备的人在同一个户外位置(为了一些特定的体育赛事)。所有设备应该在完全相同的时间发出特定事件的信号。(什么时间将事先确定,他们是否在那个时间做并不重要,只要他们在同一时间做就行了)。FWIW:这些活动将帮助人们在同一时间开始他们的体育活动。
以下是我可以做的假设:
我不能使用内部时钟来知道何时播放事件:用户可以手动更改时间,即使将设备设置为从蜂窝网络获取时间,该网络也可能无法提供准确的时间。两个设备可能登记到不同的网络中,因此它们的时间可能不会很好地同步。
在应用程序启动时,每个设备都可以要求GPS定位,并保存GPS时间与其内部时钟之间的差值。现在,主机可以根据这个GPS时间宣布事件(通过使用它的内部时钟并减去它之前保存的偏移量)。
这是否足够精确和可靠?
非常感谢,安德烈亚斯·莱特纳
发布于 2011-11-21 18:50:48
可以在onLocationChanged()
回调中获取currentTimeMillis()
和Location.getTime()
的时间差,单位为毫秒。使用requestSingleUpdate()
我只想补充一点,如果用户有数据连接,他们可以使用NTP时间,这甚至更准确,因为GPS内部时钟可能会漂移,校正它需要一段时间。
编辑:我想编辑这个答案。作为一名Android操作系统的GNSS开发人员,我意识到许多“主要的”Android OEM厂商都把这件事搞砸了。通常,NMEA语句是在芯片组或GNSS堆栈中生成的。有时时间是正确的,这取决于实现。
此外,还有一个闰秒的问题。GPS时间不是UTC时间。从这个writing it is 18 seconds ahead开始。
此外,根据文档,Location
对象的GPS时间现在是系统时间。
TLDR :使用NTP time
发布于 2012-10-23 14:13:05
您不能完全依赖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
发布于 2015-07-13 06:41:13
UTC不是从GPS派生的,APK优先于GPS。安卓设置忽略GPS时钟。You are getTime() is NIST。不是GPS
https://stackoverflow.com/questions/8210264
复制相似问题