为什么locationmanager使用新的gettime-timestamp返回旧的位置修复?

时间:2011-10-04 12:53:32

标签: android locationmanager android-location

我们有一个应用程序,在用户操作时尝试获取位置修复。它可以在GPS和网络上进行监听,并且具有基于时间/准确度的决策矩阵,以确定何时停止收听以及返回什么修复。

我们偶尔会注意到一种非常奇怪的行为。我们使用经典的方式来查看修复程序的年龄,如下所示:

long age = now - newLocation.getTime();
if(age >= prefs.getLocationMaxAge()){
    Log.d(TAG, "location too old.");
    return;
}

但有时候,根据返回的时间戳,从操作系统返回的location.getTime的年龄大概可能是15-20秒,尽管我们可以肯定它已经很老了。例如,如果经度/纬度修正来自手机30分钟前的位置!

似乎从Wi-Fi和网络都发生,但不是GPS。对我来说,这完全是疯了。有没有其他人看到这个,有什么办法吗?

我们已经在几部不同的手机上获得了它,最近的一部是Samsung Galaxy S II

非常欢迎帮助。

编辑:要非常清楚,问题是操作系统会调用“onlocationchanged”回调,其时间戳可能是几秒钟,当我知道某些时候“新”修复程序中的经度/纬度是手机至少没有停留30分钟的地方。

这使得很难准确地确定手机的位置......

1 个答案:

答案 0 :(得分:0)

  

似乎从Wi-Fi和网络都发生,但不是GPS

这看似公平,因为在基于Wi-Fi和网络蜂窝基站的三角测量中,准确性非常差。他们可能正在使用可追溯到30分钟前的缓存位置。除非您没有更改您的手机网站或移动到另一个建筑物以便可以发现新的APs,否则您恐怕只会获得缓存的位置。如果您想要新的位置,请使用GPS提供商。