Android Q - запуск службы определения местоположения на переднем плане из фона

Я не уверен, как вести себя в этом случае.

В документации сказано, что:

Считается, что приложение обращается к местоположению в фоновом режиме, если не выполняется одно из следующих условий:

  • Видна активность, относящаяся к приложению.
  • Приложение запускает службу переднего плана, которая объявила тип расположения службы переднего плана.

В примере, предоставленном Google, они используют Activity, которая запускает службу переднего плана на переднем плане:

https://github.com/android/location-samples/tree/master/LocationUpdatesForegroundService

В моем случае мне нужно начать отслеживание местоположений после того, как к моему устройству подключено устройство Bluetooth (с использованием широковещательного приемника, зарегистрированного в манифесте), что может быть в фоновом режиме или после завершения работы приложения).

Итак, я объявляю службу в манифесте, как говорится:

 <service
       android:name=".MyForegroundService"
       android:foregroundServiceType="location"
       android:exported="false" />

Вопрос в том:

В случае, когда мое приложение получает широковещательную рассылку, в фоновом режиме / завершено - если я запускаю службу переднего плана, считается ли это доступ к местоположению в фоновом режиме или доступ к местоположению на переднем плане?

Следует ли мне запрашивать ACCESS_BACKGROUND_LOCATION? или ACCESS_COARSE_LOCATION должно хватить в этом случае?


person dor506    schedule 29.12.2019    source источник


Ответы (1)


В API 29, если у вас android:foregroundServiceType "location", вам не нужно ACCESS_BACKGROUND_LOCATION. Любой доступ к местоположению, сделанный во время работы Service, считается "доступом переднего плана".

Но это предполагает, что вы можете запустить службу переднего плана. Вы должны продолжить действие, инициированное пользователем какой-то. Если Service уже запущен, это не будет проблемой; Service представляет собой продолжение действия, инициированного пользователем. Если вам нужно запустить его при подключении устройства BT, я не уверен, подходит ли это. Это может не сработать. (Если вы узнаете ... предложите отредактировать!)

Примером приложения, которому требуется разрешение ACCESS_BACKGROUND_LOCATION, может быть приложение, которое отслеживает ваше местоположение по GPS, пока не отображается Activities и не отображаются уведомления службы переднего плана типа "location". На Android Q это не может продолжаться очень долго (более 30 секунд) без разрешения.

Я считаю, что ОС также назначает ACCESS_BACKGROUND_LOCATION устаревшим приложениям, где пользователь выбрал «Разрешить все время» в диалоговом окне разрешения местоположения.

person greeble31    schedule 29.12.2019
comment
Что ж, похоже, в этом случае мне придется использовать разрешение фона. Спасибо! - person dor506; 02.01.2020