Android Q-从后台启动前台位置服务

时间:2019-12-29 21:29:48

标签: android location foreground-service android-10.0

我不确定这种情况下的行为。

在文档中说:

  

除非某个应用被认为正在后台访问位置,否则   满足以下条件之一:

     
      
  • 属于该应用的活动可见。
  •   
  • 该应用正在运行   声明了前台服务类型的前台服务   位置。
  •   

在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 在这种情况下就足够了?

1 个答案:

答案 0 :(得分:0)

在API 29上,如果android:foregroundServiceType"location",则不需要ACCESS_BACKGROUND_LOCATIONService正在运行时进行的任何位置访问都被视为“前景访问”。

但是,前提是您可以运行前台服务。您必须继续进行某种user-initiated action。如果Service已经在运行,那就没问题了; Service代表用户启动操作的继续。如果您需要在BT设备连接时启动它,那么我不确定是否符合要求。那可能行不通。 (如果您发现...请提出建议!)

需要 ACCESS_BACKGROUND_LOCATION权限的应用示例是在没有Activities且没有"location"-的情况下监视GPS位置的应用程序-类型前台服务通知正在显示。在Android Q上,未经允许,该操作将无法进行很长时间(超过30秒)。

我相信操作系统还会将ACCESS_BACKGROUND_LOCATION分配给用户在位置权限对话框中选择“始终允许”的旧版应用程序。