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

问题描述 投票:0回答:1

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

在文档中说:

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

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

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

android location foreground-service android-10.0
1个回答
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分配给用户在位置权限对话框中选择了“始终允许”的旧版应用程序。
© www.soinside.com 2019 - 2024. All rights reserved.