我不确定在这种情况下的行为。
在文档中说:
除非某个应用被认为正在后台访问位置,除非满足以下条件之一:
- 可见属于该应用的活动。
- 该应用正在运行声明了前台服务类型的前台服务位置。
在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在这种情况下应该足够了吗?
在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
分配给用户在位置权限对话框中选择了“始终允许”的旧版应用程序。