Найти тему
Nuances of programming

RxPermissions: простой способ управления разрешениями в Android M

Оглавление

Источник: 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. Запрос группы разрешений

Мы также можем запросить группу разрешений и получить результат каждого запроса по отдельности или в группе, как показано ниже.

Получение индивидуального результата:

Получение группового результата:

Вот и все! Надеюсь, эта статья оказалась для вас полезной.

Читайте также:

Читайте нас в Telegram, VK

Перевод статьи Satya Pavan Kantamani: “RxPermissions: The easiest way to Handle Android M Permissions”