Android Q 中引入的 ACCESS_BACKGROUND_LOCATION 如何影响地理围栏 API?

How does ACCESS_BACKGROUND_LOCATION introduced in Android Q affect Geofence APIs?

为了使用地理围栏 API 用户 has to give 应用程序 ACCESS_FINE_LOCATION。该位置被认为是危险的,可以随时撤销;撤销此权限后,应用程序将无法请求地理围栏更新。

ACCESS_BACKGROUND_LOCATION权限如何适合这张图片?我们确定这个权限也是dangerous and can be revoked at any time。这是否意味着如果我们要注册一些 IntentService 以便在每次地理围栏发生变化时调用,我们还必须确保用户提供了 ACCESS_BACKGROUND_LOCATION 权限?或者我们是否需要使用此权限 如果我们试图在我们自己的后台获取当前位置 Service/BroadcastReceiver?

我问这个问题的原因是文档在这一点上似乎有点含糊:描述 Q Developer Preview mentions that geofencing is one of the use cases for the background location retrieval, while the Geofencing API page 的文档在其要求中没有提到 ACCESS_BACKGROUND_LOCATION

猜测 部分“Re-register geofences only when required”:

Registered geofences are kept in the com.google.process.location process owned by the com.google.android.gms package.

将是它不是真正需要的,因为 com.google.process.location 应该是获取位置数据的那个(所以需要请求 ACCESS_BACKGROUND_LOCATION 权限的那个)。

话虽这么说,按照这个逻辑 ACCESS_FINE_LOCATION 权限应该是不需要的。需要它的事实可能是因为两个原因(我不知道真正的原因):

  • 在注册地理围栏或接收通知位置时被选中,
  • 或者 Google Play 服务会检查此权限,以禁止应用通过使用 Play 服务作为代理进程来获取信息来规避缺少位置权限。

对我来说,第二个假设更有意义,这意味着即使应用程序在技术上不需要(获取位置的过程是 Play 服务),出于 privacy/security 原因也是必需的。

按照这个逻辑,Google 应该(将?)也强制执行 ACCESS_BACKGROUND_LOCATION,以确保用户的 privacy/security 并减少电池消耗。

在 beta 4 中,当 ACCESS_BACKGROUND_LOCATION 未被授予时添加地理围栏,即使应用程序完全在前台,也会失败,状态代码为 13 ("error")。

Geofencing API Documentation 现已更新,如果我们以 Android Q

为目标,我们需要定义 ACCESS_BACKGROUND_LOCATION 来监控地理围栏

来自文档:

To use geofencing, your app must request ACCESS_FINE_LOCATION. If your app targets Android 10 (API level 29) or higher, your app must also request ACCESS_BACKGROUND_LOCATION.

您需要 Android 10 API 级 29+ 才能使用 ACCES_BACKGROUND_LOCATION