【发布时间】:2018-06-02 21:01:33
【问题描述】:
我一直在使用 GoogleApiClient 进行基于间隔和位移的更新的后台位置更新工作和测试。经过几天的测试和分析,我发现了一些我没想到的输出变化。
在使用
setInterval和setFastestInterval进行基于间隔的更新时,假设我已将 间隔 设置为 15 分钟 和 最快间隔 10 分钟,90% 的时间我在预期的时间间隔(10 到 15 分钟)内获得更新。但有时我注意到更新所需的时间比指定的间隔要长得多,例如,差异大约是 30 分钟和 60 分钟。关于为什么会有所不同的任何想法?在使用
setMinimumDisplacement进行基于距离的更新时,假设我将 位移 设置为 200 米,我只能在 静止点(行驶时即使超过200米也不更新)200米及以上。这样正常吗?
我正在使用PendingIntent 类型的位置请求,以便在BroadcastReceiver 中接收位置更新,以便在后台进行位置更新。
fusedLocationProviderClient.requestLocationUpdates(locationRequest, pendingIntent);
在测试期间,定位服务开启,定位模式为HIGH_ACCURACY。
【问题讨论】:
-
我不能说正常行为,但我看到了与您类似的问题。老实说,答案是@Mitesh Vanaliya 从文档中引用的内容,所有位置请求都被视为提示,您可能会收到比请求更准确/更差,更快/更慢的位置。或者,套用一句,“你可以告诉我们你想要什么,我们有时会这样做,但最终我们会在我们想要的时候做什么”
-
如果你不想使用谷歌推荐的
FusedLocationApi,你可以使用旧的LocationManager来获得更多的控制权。 Here 是一些关于如何做到这一点的信息。 -
我不想选择
LocationListener,因为它会在应用程序终止时终止。即使应用程序终止,我也想获得位置更新,这就是为什么我选择PendingIntent版本的FusedLocationProviderClient的requestLocationUpdates。我从setInterval获得的更新比setMinimumDisplacement好得多,因为来自 setInterval 的位置比 setMinimumDisplacement 更准确。 -
由于我有一些基于用户行进距离的过程要完成,我希望它能够以至少 1 公里的精度提供位置更新。但是 setMinimumDisplacement 的问题是,它仅在用户停止某处时才提供更新。当用户连续旅行时,即使它超过指定的 MinimumDisplacement 范围,我也不会得到单个更新。是否有任何其他方法或实施可以确保我至少根据指定距离获得位置更新?
-
我的试验确实有类似的问题。查看我的问题和来自 SO stackoverflow.com/questions/35745924/… 的同胞的回答
标签: android google-api-client fusedlocationproviderclient