ACCESS_BACKGROUND_LOCATION не работает для версий ниже Q (29) Android - PullRequest
1 голос
/ 25 февраля 2020

Мое приложение предназначено для Android API 28.

Согласно документации , я должен запрашивать ACCESS_BACKGROUND_LOCATION вместе с ACCESS_FINE_LOCATION при работе на Android API <<code>29.

Я пытался сделать это, но в onRequestPermissionResults(), ACCESS_BACKGROUND_LOCATION никогда не предоставляется и возвращает PackageManager.PERMISSION_DENIED. У меня сложилось впечатление, что это будет неявно предоставлено при запросе другого разрешения переднего плана на <<code>29.

. В качестве альтернативы, я могу удалить разрешение из запроса на API <<code>29, и все, кажется, работает как ожидалось. но я осознаю, что буду идти против документации.

Вопрос

Могу ли я опустить явный запрос для версий ACCESS_BACKGROUND_LOCATION на Android <29 и по-прежнему работает, как ожидалось, в соответствии с документацией в API <code>29, которая работает?

1 Ответ

1 голос
/ 05 марта 2020

В документации говорится:

Если ваше приложение настроено на Android 10 (уровень API 29) или ниже, выполните следующие шаги, чтобы запросить ACCESS_BACKGROUND_LOCATION:

1) Включите Разрешение ACCESS_BACKGROUND_LOCATION, а также разрешение ACCESS_COARSE_LOCATION или ACCESS_FINE_LOCATION в манифесте вашего приложения.

2) Запросите разрешение ACCESS_BACKGROUND_LOCATION, а также одно из других разрешений расположения: ACCESS_ATIONOCLCATION. Или ACCESS_COAR_. Вы можете запросить эти разрешения в одной операции.

Инструкции немного двусмысленны, потому что они не описывают, какое поведение ожидать в каждой версии API. ACCESS_BACKGROUND_LOCATION был добавлен в API 29, поэтому он не существует в API 28 и более ранних версиях, поэтому в этих случаях это, по сути, запрет, поскольку в коде для этих версий Android. 1011 нет разрешения. *

В результате запрос разрешения для ACCESS_BACKGROUND_LOCATION покажет пользователю дополнительные параметры для API 29 и выше, даже если вы ориентируетесь на более низкую версию API и при запуске кода на более старых версиях Android запрос на ACCESS_BACKGROUND_LOCATION будет автоматически отклонен. Все хорошо, хотя, так как это разрешение не существует для тех более старых версий Android в любом случае.

В коде вашего приложения, если разрешение ACCESS_BACKGROUND_LOCATION отказано в API 28 или ниже, просто игнорируйте отказ в разрешении, так как ожидается на этих Android версиях. В качестве альтернативы вы можете просто опустить запрос до ACCESS_BACKGROUND_LOCATION для API 28 или ниже, чтобы достичь того же результата.

...