【问题标题】:Android problem finding out how recent latest GPS fix isAndroid问题找出最近最新的GPS修复如何
【发布时间】:2010-12-11 18:50:36
【问题描述】:

我的应用使用 LocationListener 来跟踪当前位置。只要 GPS 提供商提供定期修复,它就可以正常工作。但是,我希望我的应用程序在位置不再可靠时提醒用户,因为修复不再是最新的。因此,我使用 timeCheckHandler 每隔几秒调用一次 getLastKnownLocation。

我的问题是,即使经常收到准确的修复,通过将 getTime() 应用于 getLastKnownLocation 返回的位置返回的时间通常比 System.currentTimeMillis() 返回的当前时间早,通常大约 20 秒。

我已通过向 onLocationChanged(arg0) 添加代码以记录修复时间 (arg0.getTime()) 和当前时间 (System.currentTimeMillis()) 进一步调查了该问题。我再次看到大约 20 秒的差异。

目前代码如下:

    public void onLocationChanged(Location arg0) {
    mapview.handleLocationChanged(mapview, arg0.getLatitude(), arg0.getLongitude(), arg0.getBearing(), arg0.getAccuracy(), "GPS fix");
    addDebugNote("Fix received at time: "+Long.toString(arg0.getTime()/1000)+" Now: "+Long.toString((System.currentTimeMillis())/1000));
}

我的调试文件的典型输出为:

Fix received at time: 1292091908 Now: 1292091928

为什么我会看到修复时间和当前系统时间之间的这种差异?

我必须接受大约 20 秒的差异是正常的吗?

【问题讨论】:

  • 我遇到了同样的问题,我添加了:arg0.setTime( System.currentTimeMillis() ); 作为onLocationChanged(Location arg0) 方法中的第一行以“更正”时间戳。我不确定这是否会在以后产生任何副作用

标签: android time gps gps-time


【解决方案1】:

GPS 定位时间独立于您的网络提供商时间/设备时间。 System.currentTimeMillis() 将为您提供设备上设置的设备时间。

如果您想知道该点有多近,您可以:

  1. 在应用程序开始时同步代码中的两个时间(GPS 和设备),方法是在您获得第一次 GPS 位置更新后立即获取两者之间的差异。在那个即时查询设备时间,看看两者有什么区别。将此差异保存在变量中。

  2. 在随后的位置更新中将此作为校正因子,以根据您需要的参考系了解准确时间。 (设备时间或 GPS)

我还发现,使用 NETWORK 作为位置提供者,您可能只能获得设备时间。因此,如果您同时监听来自(GPS 和网络)的更新,您可能还需要使用 location_obj.getProvider() 来区分这一点并过滤掉 GPS 提供者。

【讨论】:

  • 谢谢。这很有帮助。 (我想 GPS 时间必须非常准确才能如此精确地工作。我想知道为什么电话网络根本不与它同步。)
  • 好点,也许网络比 gps 更有可能?无论哪种方式,如果您的手机将时间同步到 gps,当我们尝试 getTime() 时,我们不会遇到网络时间关闭吗?所以基本上我们在使用网络进行位置更新时必须取消计时器
【解决方案2】:

今天重复测试,发现GPS时间和系统时间相差22秒。这个问题在网络上的其他地方讨论过,似乎 GPS 时间和手机的系统时间之间存在差异是正常的(在我的情况下,它设置为从网络自动更新。)一个因素是 GPS时间大约是 UTC 时间的 15 或 17 秒(取决于哪个来源是正确的)......它不同步,因为 GPS 时间自 1980 年以来一直没有更新为周期性的“闰秒”。

考虑到这一点,我认为我需要检查最新修复的最新情况的答案是将当前系统时间与最新修复的系统时间(不是 GPS 时间)进行比较。

【讨论】:

  • 重新阅读位置的 Android 参考我被提醒 getTime() 返回修复的 UTC 时间,我认为我可以相信这是准确的。因此,一定是手机的系统时间不准确。在互联网上进一步阅读,我发现手机时钟通常会偏离同步数秒。
  • 是的:2012 年有一篇 ZDNet 文章指出,android 设备(当时)没有考虑到自 1970 年以来添加到 UTC 的 15 个闰秒,而 gps 应该是准确的。
猜你喜欢
  • 2018-02-06
  • 1970-01-01
  • 2023-03-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-06-08
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多