【发布时间】: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)方法中的第一行以“更正”时间戳。我不确定这是否会在以后产生任何副作用