【问题标题】:Sync Android devices via GPS time?通过 GPS 时间同步 Android 设备?
【发布时间】:2011-11-21 10:21:05
【问题描述】:

短版:

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

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

加长版:

几个拥有 Android 设备的人在同一个户外位置(针对某些特定的体育赛事)。所有设备都应在完全相同的时间发出某些事件的信号。 (什么时间会提前确定,他们在那个时间做并不重要,只要他们同时做)。 FWIW:这些活动将帮助人们同时开始他们的体育活动。

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

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

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

在应用启动时,每台设备都可以请求 GPS 定位并保存 GPS 时间与其内部时钟之间的差异。现在 master 可以根据这个 GPS 时间宣布事件(通过使用它的内部时钟并减去它之前保存的偏移量)。

这是否足够精确和可靠?

提前非常感谢, 安德烈亚斯·莱特纳

【问题讨论】:

  • 你可以使用市场上的应用GPS时间market.android.com/details?id=net.sourcewalker.gpstime
  • 这是个好主意。我可以使用这个应用程序来试试它是否有效。不过,最终我想将此功能构建到我的应用程序中。我不想让我的用户安装另一个应用程序(即使他们不需要它),甚至是需要 root 访问权限的更成问题的应用程序。
  • 嗨,我也在追求同样的事情。你曾经能够做到这一点吗?

标签: android time gps sync


【解决方案1】:

您可以在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

【讨论】:

  • 听起来不错。我不需要更改系统时间。如果每台设备(安装了我的应用程序)计算该偏移量并因此可以使用共同的参考时间就足够了。
【解决方案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

【讨论】:

    【解决方案3】:

    UTC 并非源自 GPS,APK 会覆盖 GPS。 Android 设置为忽略 GPS 时钟。你是 getTime() 是 NIST。不是全球定位系统

    【讨论】:

    • 如果这应该是对原始问题的回答,那么您需要改进它。
    猜你喜欢
    • 2012-10-02
    • 2015-10-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多