为啥Android会在“新鲜”位置之后返回“陈旧”位置?
Posted
技术标签:
【中文标题】为啥Android会在“新鲜”位置之后返回“陈旧”位置?【英文标题】: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,这怎么可能呢?
【问题讨论】:
【参考方案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
,因此可能会导致重新检索相同的旧位置。
【讨论】:
以上是关于为啥Android会在“新鲜”位置之后返回“陈旧”位置?的主要内容,如果未能解决你的问题,请参考以下文章