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

Posted

技术标签:

【中文标题】Android Q 中引入的 ACCESS_BACKGROUND_LOCATION 对地理围栏 API 有何影响?【英文标题】:How does ACCESS_BACKGROUND_LOCATION introduced in Android Q affect Geofence APIs? 【发布时间】:2019-09-06 09:12:02 【问题描述】:

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

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

我问这个问题的原因是文档在这一点上似乎有点含糊:描述 Q Developer Preview 的文档提到地理围栏是后台位置检索的用例之一,而 @ 987654325@ 的要求中没有提到ACCESS_BACKGROUND_LOCATION

【问题讨论】:

【参考方案1】:

Geofencing API Documentation 现已更新,如果我们针对 android Q,我们需要定义 ACCESS_BACKGROUND_LOCATION 来监控地理围栏

来自文档:

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

【讨论】:

【参考方案2】:

我的部分“Re-register geofences only when required”:

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

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

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

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

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

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

【讨论】:

是的,我的想法完全一样:一方面,与地理围栏相关的工作(需要权限)发生在单独的进程中,因此不需要后台位置权限;另一方面,ACCESS_FINE_LOCATION 权限是必需的。【参考方案3】:

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

【讨论】:

【参考方案4】:

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

【讨论】:

以上是关于Android Q 中引入的 ACCESS_BACKGROUND_LOCATION 对地理围栏 API 有何影响?的主要内容,如果未能解决你的问题,请参考以下文章

Android Q:范围存储中的 SQLite 数据库

android 气泡小红点(BadgeView)

SandHook 第四弹 | Android Q 支持 & Inline 的特别处理

[渲染过程中的Android P和Q中的Android WebView崩溃

Android Q 正式命名为 Android 10

android Q中无法识别MediaProjection服务类型