通过GPS时间同步Android设备?

use*_*534 20 time gps android sync

精简版:

问题:我需要几个Android设备才能在同一时间(大约100毫秒内)执行某些操作.例如,我希望所有设备在之前确定的时间点播放某种声音.

问题:我可以使用GPS时间确保设备时钟同步吗?

更长的版本:

几个拥有Android设备的人都在同一个室外位置(某些特定的体育赛事).所有设备应在同一时间发出某些事件的信号.(事先确定什么时间,只要他们同时这样做,他们在那个时间完成它并不重要).FWIW:这些活动将帮助人们同时开展体育活动.

以下是我可以做出的假设:

  • 可能有也可能没有细胞覆盖.(它在户外,可能远离市区)
  • 设备可以连接或不连接到互联网.(有些人可能没有数据计划)
  • 设备可以相互通信.如果设备没有连接到互联网,他们将通过wifi连接(虽然wifi可能没有互联网网关).
  • 设备在室外(而不是建筑物内).(这很好,这意味着所有设备都可以获得GPS修复)
  • 这些设备在物理上彼此靠近(即,在300平方米内).(不确定这是否重要)

我无法使用内部时钟知道何时播放事件:用户可以手动更改时间,即使设备设置为从蜂窝网络获取时间,该网络也可能无法提供正确的时间.两个设备可能被预订到不同的网络中,因此它们的时间可能无法很好地同步.

在应用启动时,每个设备都可以要求GPS修复并保存GPS时间与其内部时钟之间的差异.现在,主人可以根据此GPS时间宣布事件(通过使用它的内部时钟并减去之前保存的偏移量).

这是否足够精确可靠?

非常感谢Andreas Leitner

Ren*_*eno 13

你可以在从几毫秒的时间差currentTimeMillis(),并Location.getTime()onLocationChanged()回调.使用requestSingleUpdate()


我只想补充一点,如果用户有数据连接,他们可以使用NTP时间,这更准确,因为GPS内部时钟可能漂移并纠正它需要一段时间.


编辑:我想编辑这个答案.在作为Android操作系统的GNSS开发人员工作后,我意识到许多"主要"Android OEM已经搞砸了.通常在芯片组或GNSS堆栈处生成NMEA语句.有时候时间是对的,这取决于实施.

还存在闰秒问题.GPS时间不是UTC时间.在撰写本文时,它提前18秒.

此外Location,根据文档,来自对象的GPS时间现在是系统时间

TLDR:使用NTP时间

  • 听起来不错.我不需要改变系统时间.如果每个设备(安装了我的应用程序)计算该偏移量就足够了,因此可以使用公共参考时间. (3认同)