Android Q中引入的ACCESS_BACKGROUND_LOCATION如何影响Geofence API?

时间:2019-04-16 09:47:33

标签: android android-location android-geofence androidq

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

ACCESS_BACKGROUND_LOCATION权限如何适合此图片?我们肯定知道此权限也是dangerouscan be revoked at any time。这是否意味着如果我们想注册每次IntentService才能在每次更改地理围栏时调用,还必须确保用户提供了ACCESS_BACKGROUND_LOCATION许可?或者,如果我们尝试在我们自己的后台Service / BroadcastReceiver中获取当前位置,我们是否仅需要使用此权限

我问这个问题的原因是,此时文档似乎有点含糊:描述Q Developer Preview的文档提到地理围栏是背景位置检索的用例之一,而Geofencing API page在其要求中未提及ACCESS_BACKGROUND_LOCATION

4 个答案:

答案 0 :(得分:2)

Geofencing API Documentation现在已更新,如果我们定位到Android Q,我们需要定义ACCESS_BACKGROUND_LOCATION来监视地理围栏

从文档中:

  

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

答案 1 :(得分:1)

我的猜测部分“ 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服务),出于隐私/安全原因也需要它。

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

答案 2 :(得分:0)

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

答案 3 :(得分:-1)

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