我的应用程序使用LocationListener来跟踪当前位置。只要GPS提供者提供定期修复,这就很好地运作。然而,如果位置不再可靠,因为修复不再是当前的,我希望我的应用程序会向用户发出警报。因此,我使用timeCheckHandler每隔几秒钟调用getLastKnownLocation。
我的问题是,即使经常接收到准确的修复,将getLastKnownLocation返回的位置应用getTime()返回的时间通常比System.currentTimeMillis()返回的当前时间旧,通常相差约20秒。
我通过添加代码到onLocationChanged(arg0)来进一步研究了这个问题,以记录修复的时间(arg0.getTime())和当前时间(System.currentTimeMillis())。同样,我看到一个约20秒的差异。
代码目前读取如下:
我的 Debug 文件的典型输出如下:
我的问题是,即使经常接收到准确的修复,将getLastKnownLocation返回的位置应用getTime()返回的时间通常比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));
}
我的 Debug 文件的典型输出如下:
Fix received at time: 1292091908 Now: 1292091928
我为什么会看到修复时间和当前系统时间之间的差异?
我必须接受大约20秒的差异是正常的吗?
onLocationChanged(Location arg0)
方法的第一行添加了arg0.setTime( System.currentTimeMillis() );
来“修正”时间戳。我不确定这样做是否会在以后产生任何副作用。 - ApollonDigital