Android问题找出最近的最新GPS修复方法

pre*_*bgg 6 time gps android gps-time

我的应用使用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));
}
Run Code Online (Sandbox Code Playgroud)

和我的调试文件的典型输出读取:

Fix received at time: 1292091908 Now: 1292091928
Run Code Online (Sandbox Code Playgroud)

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

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

Pri*_*tam 20

GPS定位时间与网络提供商的时间/设备时间无关.System.currentTimeMillis()将为您的设备设置设备时间.

如果您想了解最近的观点,您可以:

  1. 在应用程序启动时同步代码中的两个时间(GPS和设备),只要您获得第一次GPS位置更新,就可以获得两者之间的差异.在那个即时查询设备时间,看看两者有什么区别.将此差异保存在变量中.

  2. 将其用作后续位置更新中的校正因子,以根据所需的参考框架了解确切时间.(设备时间或GPS)

此外,我发现使用NETWORK作为位置提供程序,您可能只获得设备时间.因此,如果您正在收听来自两者(GPS和网络)的更新,您可能还需要使用location_obj.getProvider()来区分它并过滤掉GPS提供商.