Update 04. Библиотеки для разрешений.md
This commit is contained in:
committed by
GitHub
parent
60ff7a23aa
commit
f86ec0ea32
@@ -1,102 +1,17 @@
|
||||

|
||||
|
||||
Как вы могли заметить, алгоритм работы с разрешениями ветвист и накладывает множество ограничений на исполнителя. Хотя новые библиотеки от 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. А в следующей теме вас ждут файлы и особенности работы с ними.
|
||||
|
||||
Reference in New Issue
Block a user