Работа с Runtime Permissions в Android 6. Получаем разрешения программно

Работа с Runtime Permissions в Android 6. Получаем разрешения программно

В этой статье мы рассмотрим работу с получением разрешений во время выполнения, которые были добавлены в Android 6 (API 23).

Runtime Permissions в Android API 23. Теория

Одним из основных изменений в Android API 23 является новая система разрешений. В более ранних версиях разрешения объявляли в файле AndroidManifest.xml и больше никаких действий не требовалось. Но с Android 6 мы должны запрашивать разрешения из категории «Опасных» во время выполнения.

В документации по работе с разрешениями указано, что их следует получать не все сразу, а по мере необходимости той или иной функции в процессе работы приложения.

Прежде чем запрашивать разрешения, нам нужно описать их в файле AndroidManifest.xml.

Процесс получения разрешений:

1). Узнать, получено ли в приложении необходимое разрешение. Например, так:

2). Если разрешения нет, то запросить его с помощью метода requestPermissions():

Сразу несколько разрешений можно запросить так:

3). Обработать результат запроса на получение разрешений можно так:

Обратите внимание на массив grantResults[] — здесь хранятся результаты по каждому из запрашиваемых разрешений. Если в методе requestPermissions() мы запрашивали 1 разрешение, то обрабатываем только 1 значение массива результатов: grantResults[0].

Некоторые разрешения перекочевали в раздел настроек: мы все также описываем их в файле манифеста, однако обрабатывать их нужно уже не внутри приложения, а на странице настроек приложения.

Давайте на примере посмотрим на разные способы получения разрешений.

Runtime Permissions в Android API 23. Практика

В нашем тестовом приложении мы будем получать данные телефона, поэтому нам нужно запрашивать разрешение на получение Manifest.permission.READ_PHONE_STATE.

В коде ниже у нас описан весь процесс обработки так называемых «Опасных» разрешений, которые требуют взаимодействия с пользователем. Для начала создайте новый проект в Android Studio.

Идем в файл AndroidManifest.xml и добавляем разрешение на работу со звонками:

Теперь идем в MainActivity.java и описываем процесс получения разрешений и обработку результатов:

Если запустить приложение, то получим такой результат:

runtime permissions android api 23

На первом экране мы запрашиваем разрешение. 2 — успешное их получение. 3 — Разрешение не получено

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

Например, работа со звонками является основой приложения, а пользователь запретил доступ. В этом случае при следующем запуске пользователю следует давать возможность изменить свой выбор, иначе — приложение закрывается. Давайте реализуем эту функциональность в нашем приложении:

Новую функциональность я специально выделил:

В коде выше мы создали свой AlertDialog, в котором просим пользователя пойти в настройки и все-таки включить нужное разрешение, иначе приложение просто закончит работу.

Запустим приложение на устройстве с Android 6 (API 23) и посмотрим результат:
Результат здесь

Пользователь отклоняет запрос на получение разрешение, после чего приложение просит его перейти в настройки и все-таки дать разрешения — иначе оно просто закрывается

Исходный код приложения здесь.

Обновляйте свои приложения до API 23 и выше с механизмом Android Runtime Permissions. Подписывайтесь на новые статьи по разработке под Android и Java программированию!

2 thoughts to “Работа с Runtime Permissions в Android 6. Получаем разрешения программно”

Добавить комментарий для powercat Отменить ответ

Ваш адрес email не будет опубликован. Обязательные поля помечены *