7

为了使用 Geofence API,用户必须给应用程序ACCESS_FINE_LOCATION。这个位置被认为是危险的,可以随时撤销;一旦此权限被撤销,应用程序将无法请求地理围栏更新。

ACCESS_BACKGROUND_LOCATION这张图片中的权限如何?我们确信这种​​许可也是危险的,可以随时撤销。这是否意味着如果我们要注册一些IntentService在每次地理围栏更改时调用的内容,我们还必须确保用户提供了ACCESS_BACKGROUND_LOCATION权限?还是仅当我们尝试在我们自己的后台 Service/BroadcastReceiver 中获取当前位置时才需要使用此权限?

我问这个问题的原因是文档在这一点上似乎有点含糊:描述Q Developer Preview的文档提到地理围栏是后台位置检索的用例之一,而地理围栏API 页面确实如此ACCESS_BACKGROUND_LOCATION在其要求中不提。

4

4 回答 4

6

地理围栏 API 文档现已更新,ACCESS_BACKGROUND_LOCATION如果我们以 Android Q 为目标,我们需要定义以监控地理围栏

从文档:

要使用地理围栏,您的应用必须请求 ACCESS_FINE_LOCATION。如果您的应用面向 Android 10(API 级别 29)或更高版本,您的应用还必须请求 ACCESS_BACKGROUND_LOCATION。

于 2019-09-12T05:01:49.280 回答
4

仅在需要时重新注册地理围栏”部分:

注册的地理围栏保存在包com.google.process.location拥有的进程中com.google.android.gms

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

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

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

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

按照这个逻辑,谷歌应该(将?)也强制执行ACCESS_BACKGROUND_LOCATION,以确保用户的隐私/安全并减少电池消耗。

于 2019-04-16T10:10:34.473 回答
3

ACCESS_BACKGROUND_LOCATION在 beta 4 中,即使应用程序完全处于前台,在未授予时添加地理围栏也会失败,状态码为 13(“错误”)。

于 2019-06-11T09:39:43.423 回答
0

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

于 2020-04-14T18:30:44.950 回答