【问题标题】:Why does Android return a "stale" location after a "fresh" one?为什么Android会在“新鲜”位置之后返回“陈旧”位置?
【发布时间】:2017-11-02 10:01:13
【问题描述】:

我有一个位置感知 Android 应用,它使用 FusedLocationApi 进行位置管理。

当应用需要获取其位置时,它首先会获取最后一个已知位置。如果位置不超过一分钟,则使用该位置,否则等待新的位置更新。

现在,当四处移动时,比如从位置 A 到 B,我观察到以下行为。一旦我到达 B,应用程序就会报告 B 的位置,这很好,并且是预期的行为。但是,有时,该应用程序会在此后不久报告 A 的位置。鉴于它已经将当前位置更新为 B,这怎么可能呢?

【问题讨论】:

    标签: android gps location android-fusedlocation


    【解决方案1】:

    当您到达 B 时,它应该将最后一个位置显示为“B” 但请确保您在这里经常更新您的位置,您可以设置位置请求。

    LocationRequest locationRequest locationRequest = new LocationRequest();
            locationRequest.setInterval("4000"); //Interval 
            locationRequest.setFastestInterval("4000");//Fast Interval
            locationRequest.setPriority(LocationRequest.PRIORITY_HIGH_ACCURACY);
    

    【讨论】:

    • 我的代码实际上看起来像上面。我不明白的是应用程序最初如何正确更新到 B 然后突然恢复到 A。
    • 两个位置之间的距离是多少。 ?我的意思是够远了吗?
    • 全长约4公里,约需5分钟。
    • 哦..那么代码中一定有问题。调试它。您可能会找到解决方案。
    【解决方案2】:

    作为 FusedLocationAPI 结果的类 Location 有一个 getTime() 函数。当您收到位置更新时,您可以使用 getTime 函数与前一个进行比较,以查看哪个更新。

    【讨论】:

      【解决方案3】:

      确保明智地使用这些参数。因为它会影响电池和应用性能。

      //update interval
      setInterval(UPDATE_INTERVAL);
      //Fastest interval
      setFastestInterval(FASTEST_INTERVAL);
      //Accuracy required
      setPriority(LocationRequest.PRIORITY_HIGH_ACCURACY);
      //Smallest variation in between locations
      setSmallestDisplacement(MIN_DISTANCE_CHANGE_FOR_UPDATES);
      

      由于您可能没有设置 setSmallestDisplacement ,因此可能会导致重新检索相同的旧位置。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-08-14
        • 2011-11-30
        • 2023-04-06
        • 2016-09-23
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多