我的应用程序使用LocationListener来跟踪当前位置。只要GPS提供商提供定期修复,就可以很好地解决此问题。但是,我希望我的应用程序是否不再可靠,因为修复程序不再是当前的,请提醒用户。因此,我已经使用TimeCheckHandler每隔几秒钟致电GetLastnoyllocation。

我的问题是,即使经常收到准确的修复程序,通过将getTime()应用于getlastnoyponlocation返回的位置返回的时间通常也比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秒的差异是正常的?

有帮助吗?

解决方案

GPS位置时间独立于您的网络提供商时间/设备时间。 system.currentTimeMillis()将为您设备设置设备的时间。

如果您想知道最近的重点:您可以:

  1. 在应用程序时,在代码中同步的时间(GPS和设备)在您获得第一个GPS位置更新后立即进行差异开始。在那个即时查询设备的时间,看看两者的区别是什么。在变量中保存此差异。

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

我还发现,将网络用作位置提供商,您只能获得设备时间。因此,如果您正在聆听(GPS和网络)的更新,则可能需要使用locusto_obj.getProvider()并过滤GPS提供商来区分它。

其他提示

今天重复测试,我发现GPS时间和系统时间之间的差异为22秒。该问题在网络上的其他地方进行了讨论,似乎正常的GPS时间与手机的系统时间之间有区别(在我的情况下,将自动从网络自动更新。)一个因素是GPS。时间大约是UTC时间的15或17秒(取决于哪个源是正确的)...这是不同步的,因为GPS时间自1980年以来一直在定期“ LEAP秒”中更新。

考虑到这一点,我认为我需要检查最新修复程序的答案是将当前系统时间与最新修复程序的系统时间(不是GPS时间)进行比较。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top