12

我一直在使用GoogleApiClient基于间隔和位移的更新来处理和测试后台位置更新。经过几天的测试和分析,我发现了一些我没想到的输出变化。

  1. 在使用setIntervalsetFastestInterval基于间隔的更新时,假设我将间隔设置为15 分钟最快间隔设置为10 分钟,90% 的时间我在预期的间隔(10 到 15 分钟)内获得更新。但有时我注意到更新所需的时间比指定的间隔要长得多,例如,差异大约是 30 分钟和 60 分钟。关于为什么会有所不同的任何想法?

  2. 在使用setMinimumDisplacement基于距离的更新时,假设我将Displacement设置为200 米,我只在200 米及以上的静止点上获得更新(在旅行时,即使超过 200 米也不会提供更新)。这是它正常工作的方式吗?

我正在使用PendingIntent位置请求类型,以便BroadcastReceiver在后台接收位置更新以获取位置更新。

fusedLocationProviderClient.requestLocationUpdates(locationRequest, pendingIntent);

测试时,定位服务开启定位模式为HIGH_ACCURACY 。

4

2 回答 2

4

请参阅文档以获取 LocationRequest API 的正确行为。

LocationRequest API 文档

从这个文档:

  • 应用程序无法指定LocationClient. 事实上,系统可能有多个位置源(提供者)在运行,并且可能将来自多个源的结果融合到单个 Location 对象中
  • ACCESS_COARSE_LOCATION来自应用程序和非应用程序的位置请求ACCESS_FINE_LOCATION将被自动限制到较慢的时间间隔,并且位置对象将被混淆以仅显示粗略的准确度。
  • 所有位置请求都被视为提示,您可能会收到比请求更准确/更差、更快/更慢的位置

有关更多详细说明,请阅读上述链接中的完整文档。

希望这个解释可以帮助你。

于 2018-01-17T09:01:25.513 回答
0

我找到了第二个问题的答案。文档说不建议将其设置setMinimumDisplacement为 0,但这是实际的技巧。当它设置为 0 时,它按预期工作。

当有两个不同LocationRequest的 s(基于间隔和位移)时,它可以正常工作,这样一个设置不会影响另一个。

对于上述情况,首选前台服务,以便位置更新不会被操作系统杀死。

于 2019-06-17T06:15:51.057 回答