在 O 设备上处理应用 运行 后台位置限制的好策略是什么?

What are good strategies for dealing with background location limits for apps running on O devices?

考虑到在 O 设备后台 Android 应用程序 运行 上的位置收集限制,对于希望更频繁地更新位置的开发人员来说,有哪些好的选择?

我知道 O 仍处于开发者预览阶段,但是在后台收集位置的方式发生了重大变化,我想提前计划我的应用程序可能需要的变化。

在 O 设备上 运行 时,不在前台请求位置更新的应用会受到一些限制。位置更新在后台仍然可用,但它们发生的频率可能低于 LocationRequest#setInterval 中指定的间隔。开发人员可以通过以下选项获得更频繁的位置更新:

  1. 在前台请求更新。这意味着请求和删除更新作为 activity 生命周期的一部分(例如,在 onResume() 中请求并在 onPause() 中删除)。前台的应用程序 运行 不受 O 设备上的任何位置限制。

  2. 使用 foreground service 请求更新。这涉及向用户显示持久通知。

  3. 使用地理围栏根据设备的位置触发通知。如果您的用例依赖于设备进入、停留或离开特定的感兴趣区域,此 API 提供了一种获取这些通知的高效方法。请参阅 GeofencingEvent#getTriggeringLocation[,它获取触发地理围栏转换的位置。

  4. 使用 LocationRequest#setMaxWaitTime 使用批量位置更新。使用此 API,可能会比非分批 API 更频繁地提供位置,但是,将在 setMaxWaitTime 中指定的时间间隔后分批交付(也限制为几次小时) 使用被动位置更新:当您的应用程序在后台时,如果前台的另一个应用程序请求位置更新,它可能会继续被动地接收位置更新。您可以使用 LocationRequest#setFastestInterval 以较小的间隔(例如 5 分钟)接收其中一些更新。

鉴于这是一个关于如何处理 AndroidO 后台位置限制的大范围问题,这可能是相关的:

如果您的应用需要在后台接收位置主要用作依赖输入,Awareness API 可能对您有用。

Geofence 是一个示例,您希望在设备移动 X 英里时收到通知(您并不真正关心实际位置坐标)。同样,如果您需要位置来执行诸如在服务器上获取与位置相关的数据或触发与位置相关的通知之类的操作,Awareness 提供了一系列有用的 API。

例如,weather snapshot API lets you get the weather at device location without you having to request locations. TimeFence 具有基于时区或 sunrise/set 设备位置等即时唤醒应用程序的 API。