我不确定这种情况下的行为。
在文档中说:
除非某个应用被认为正在后台访问位置,否则 满足以下条件之一:
- 属于该应用的活动可见。
- 该应用正在运行 声明了前台服务类型的前台服务 位置。
在google提供的示例中,他们使用“活动”在前台启动前台服务:
https://github.com/android/location-samples/tree/master/LocationUpdatesForegroundService
对于我来说,一旦蓝牙设备连接到我的设备(使用清单注册的广播接收器),我就需要开始跟踪位置-可能在后台,或者在应用终止后。
所以,我在清单中声明了服务,就像他们说的那样:
<service
android:name=".MyForegroundService"
android:foregroundServiceType="location"
android:exported="false" />
问题是:
在我的应用收到广播的情况下,在后台/终止时-如果我启动前台服务,是否认为在后台访问位置或正在访问前台位置?
我应该请求 ACCESS_BACKGROUND_LOCATION 吗?还是 ACCESS_COARSE_LOCATION 在这种情况下就足够了?
答案 0 :(得分:0)
在API 29上,如果android:foregroundServiceType
为"location"
,则不需要ACCESS_BACKGROUND_LOCATION
。 Service
正在运行时进行的任何位置访问都被视为“前景访问”。
但是,前提是您可以运行前台服务。您必须继续进行某种user-initiated action。如果Service
已经在运行,那就没问题了; Service
代表用户启动操作的继续。如果您需要在BT设备连接时启动它,那么我不确定是否符合要求。那可能行不通。 (如果您发现...请提出建议!)
需要 ACCESS_BACKGROUND_LOCATION
权限的应用示例是在没有Activities
且没有"location"
-的情况下监视GPS位置的应用程序-类型前台服务通知正在显示。在Android Q上,未经允许,该操作将无法进行很长时间(超过30秒)。
我相信操作系统还会将ACCESS_BACKGROUND_LOCATION
分配给用户在位置权限对话框中选择“始终允许”的旧版应用程序。