Источник: Nuances of Programming
Давайте узнаем, как можно с легкостью настроить управление потоком разрешений с помощью всего нескольких строк кода.
С того времени, как в качестве меры безопасности был выпущен Android Marshmallow, существует процедура получения разрешений на доступ к конфиденциальным данным. Цель существования разрешений — защита конфиденциальности пользователя. Android-приложения должны запрашивать разрешение на доступ к конфиденциальным пользовательским данным, таким как личные медиафайлы, камера, запись в память телефона и т. д. В некоторых случаях система автоматически предоставляет разрешение, а иногда пользователю может быть предложено одобрить его самостоятельно. Эта фича с разрешениями переместила безопасность Android на уровень выше, но пока не на самый верхний.
Начиная с этапа разработки, процесс запроса разрешений и обработки его результата представляет некоторые сложности. Это в природе разработчика — искать зависимости или библиотеки, которые позволили бы выполнять работу с меньшими затратами и за более короткое время. Здесь мы рассмотрим библиотеку RxPermissions, которая упрощает ситуацию с обработкой разрешений. Это одна из моих любимых библиотек, поэтому я подумал, что она будет полезна немного большему числу людей.
RxPermissions
RxPermissions — это библиотека, которая позволяет использовать RxJava с моделью разрешений Android Marshmallow. Прежде чем углубиться в работу с этой библиотекой, рекомендую ознакомиться с основами Rx. Для тех, кто предпочитает не использовать Rx, существует несколько других хороших вариантов:
- Dexter: библиотека Android, которая упрощает процесс запроса разрешений во время выполнения;
- Easypermissions: библиотека-оболочка для упрощения базовой логики системных разрешений при таргетинге на Android M или выше;
- PermissionsDispatcher: предоставляет простой API на основе аннотаций для обработки разрешений среды выполнения.
Цель использования этих библиотек — сохранить чистоту и безопасность нашего кода. С их помощью мы можем сократить количество строк шаблонного кода. А теперь давайте начнем углубленное знакомство с библиотекой RxPermissions.
Подробное руководство
Чтобы разобраться как можно лучше, давайте пройдем весь путь по шагам. Для использования этой библиотеки ваша версия SDK должна быть как минимум >= 11.
Шаг 1: Добавляем зависимости
В корень или в build.gradle на уровне проекта добавьте:
Далее добавьте зависимость RxPermission в build.gradle на уровне приложения:
Шаг 2: Инициализируем RxPermissions
Внутри активности или фрагмента, куда вы хотите поместить запрос разрешения, в первую очередь инициализируйте RxPermission в контексте:
// Здесь находится экземпляр активности или фрагмента
val rxPermissions = RxPermissions(this)
Примечание: При инициализации RxPermission внутри фрагмента в качестве параметра конструктора нужно передать экземпляр фрагмента new RxPermissions(this), а не new RxPermissions(fragment.getActivity()). В противном случае можно столкнуться с исключением “java.lang.IllegalStateException: FragmentManager is already executing transactions”.
Шаг 3. Используем для запроса разрешения
Теперь мы можем использовать экземпляр, инициализированный на предыдущем шаге, чтобы запросить разрешение и обработать результат.
Разве это не проще, чем использовать дополнительные классы и методы? Мы можем легко обработать результат и, основываясь на выходных данных, выполнять нужные нам действия. Например, выполнить что-либо при получении разрешения и нажать на “Больше не показывать этот диалог», чтобы перейти на страницу настроек, и так далее.
Шаг 4. Запрос группы разрешений
Мы также можем запросить группу разрешений и получить результат каждого запроса по отдельности или в группе, как показано ниже.
Получение индивидуального результата:
Получение группового результата:
Вот и все! Надеюсь, эта статья оказалась для вас полезной.
Читайте также:
Перевод статьи Satya Pavan Kantamani: “RxPermissions: The easiest way to Handle Android M Permissions”