为了使用Geofence 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的文档提到地理围栏是背景位置检索的用例之一,而Geofencing API page在其要求中未提及ACCESS_BACKGROUND_LOCATION
。
答案 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
不需要许可。需要它的事实可能是由于两个原因(我不知道真正的原因):
对于我来说,第二个假设更有意义,这意味着即使从技术上讲应用程序并不需要(获取位置的过程是Play服务),出于隐私/安全原因也需要它。
按照此逻辑,Google还应该(将要执行)强制执行ACCESS_BACKGROUND_LOCATION
,以确保用户的隐私/安全并减少电池消耗。
答案 2 :(得分:0)
在beta 4上,即使未完全应用ACCESS_BACKGROUND_LOCATION
时添加地理围栏,即使应用程序完全位于前台,也会失败,状态码为13(“错误”)。
答案 3 :(得分:-1)
您需要Android 10 API级别29+才能使用ACCES_BACKGROUND_LOCATION