Update 04. Библиотеки для разрешений.md

This commit is contained in:
AleksandrAnikin13
2025-10-03 13:16:20 +04:00
committed by GitHub
parent 60ff7a23aa
commit f86ec0ea32
@@ -1,102 +1,17 @@
![img](images/04_усталый%20разработчик.png)
Как вы могли заметить, алгоритм работы с разрешениями ветвист и накладывает множество ограничений на исполнителя. Хотя новые библиотеки от Google позволяют упростить работу с разрешениями, существуют библиотеки, добавляющие интеграцию с RxJava и корутинами.
Как вы могли заметить, алгоритм работы с разрешениями ветвист и накладывает множество ограничений на исполнителя. Хотя новые библиотеки от Google позволяют упростить работу с разрешениями, существуют библиотеки, добавляющие интеграцию с корутинами.
В этом уроке вы познакомитесь с двумя такими библиотеками:
- RxPermissions для работы с RxJava,
- Peko для работы с корутинами.
В этом уроке вы познакомитесь с библиотекой Peko для работы с корутинами.
Приступим!
## RxPermissions
Откройте проект из прошлого урока. Вся работа будет происходить в нём.
1. Для добавления RxPermissions к проекту нужно добавить Maven-репозиторий `jitpack.io`. В современных проектах список Maven-репозиториев находится в `settings.gradle` в папке проекта. Там нам нужен блок, который выглядит примерно так:
```groovy
dependencyResolutionManagement {
repositoriesMode.set(RepositoriesMode.FAIL_ON_PROJECT_REPOS)
repositories {
google()
mavenCentral()
}
}
```
2. И в блоке `repositories` нужно добавить `maven { url 'https://jitpack.io' }`, чтобы затем добавить в зависимости приложения, заменив `<latest_version>` на последнюю версию библиотеки:
```groovy
implementation 'com.github.tbruyelle:rxpermissions:<latest_version>'
```
3. Затем в `Activity` или `Fragment` нужно будет создать инстанс класса `RxPermissions`:
```kotlin
private val rxPermissions = RxPermissions(this)
```
4. Так же, как и с библиотекой от Google, переменная объявляется в самой `Activity` или `Fragment` и создаётся лишь один раз. Затем в нужный момент запрашиваем разрешение и подписываемся на ответ:
```kotlin
rxPermissions
.request(Manifest.permission.CAMERA)
.subscribe { granted: Boolean ->
if (granted) {
// Пользователь дал разрешение, можно продолжать работу
} else {
// Пользователь отказал в предоставлении разрешения
}
}
```
5. Итого в нашем тестовом приложении мы можем убрать кусок кода, связанный с библиотекой от Google:
```kotlin
private val requestPermissionLauncher = registerForActivityResult(ActivityResultContracts.RequestPermission()) { granted ->
if (granted) {
// Пользователь дал разрешение, можно продолжать работу
binding.permissionRequestFrame.visibility = View.GONE
binding.permissionGranted.visibility = View.VISIBLE
} else {
// Пользователь отказал в предоставлении разрешения
binding.permissionRequestFrame.visibility = View.VISIBLE
binding.permissionGranted.visibility = View.GONE
}
}
```
6. Теперь запрос разрешений будет вызван при нажатии на `permissionRequestFrame`:
```kotlin
binding.permissionRequestFrame.setOnClickListener {
rxPermissions
.request(Manifest.permission.CAMERA)
.subscribe { granted: Boolean ->
if (granted) {
// Пользователь дал разрешение, можно продолжать работу
binding.permissionRequestFrame.visibility = View.GONE
binding.permissionGranted.visibility = View.VISIBLE
} else {
// Пользователь отказал в предоставлении разрешения
binding.permissionRequestFrame.visibility = View.VISIBLE
binding.permissionGranted.visibility = View.GONE
}
}
}
```
Как вы можете заметить, кода стало не сильно меньше, но если в вашем проекте используется RxJava, то эта библиотека может быть вам особенно полезна. Однако логику причин на разрешение и логику отправки пользователя в настройки всё равно придётся делать самостоятельно.
## Peko
В случае с корутинами существует библиотека, предоставляющая похожий интерфейс, — [Peko](https://github.com/deva666/Peko).
1. Для библиотеки [Peko](https://github.com/deva666/Peko) достаточно добавить строчку в `build.gradle` приложения, заменив `<latest_version>` на последнюю версию:
1. Для неё достаточно добавить в `build.gradle` приложения в зависимости следующую строчку, заменив `<latest_version>` на последнюю версию:
```groovy
implementation 'com.markodevcic:peko:<latest_version>'
```Kotlin
implementation "com.markodevcic:peko:<latest_version>"
```
2. Дальше немного необычно: эта библиотека инициализируется в классе нашего приложения — наследника `Application`, и если передать в метод инициализации любой `Context`, кроме `Application`, то приложение упадёт:
@@ -186,6 +101,6 @@ class PermissionFragment : Fragment() {
- Какие типы разрешений есть в Android.
- Как работать с runtime permissions.
- Какие библиотеки подходят для работы с разрешениями.
- Как с помощью сторонних библиотек обегчить себе работу с разрешениями.
Эти знания помогут вам добавить выбор обложки плейлиста в Playlist Maker. А в следующей теме вас ждут файлы и особенности работы с ними.