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

Mat*_*ias 6 android locationmanager android-location

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

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

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

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

它似乎既发生在Wi-Fi和网络上,也不发生在GPS上.对我来说,这完全是疯了.有没有其他人看过这个,有什么办法吗?

我们已经在几款不同的手机上使用它,最近的一款是三星Galaxy S II.

非常欢迎帮助.

编辑:要非常清楚,问题是操作系统调用"onlocationchanged"回调,其时间戳可能是几秒钟,当我确定"新"中的经度/纬度时修复是手机至少没有使用30分钟的地方.

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

Ren*_*eno 0

似乎 Wi-Fi 和网络都会发生这种情况,但 GPS 不会发生这种情况

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