Является обёрткой для AndPermission, предназначена для быстрого запроса разрешений на Android, с возможностью цепного вызова и адаптации к большинству отечественных систем.
При запросе нескольких разрешений в рамках этого фреймворка используется метод очереди: сначала запрашивается первое разрешение, после успешного запроса первого разрешения выполняется запрос следующего разрешения, а при неудачном запросе первого разрешения весь запрос завершается неудачно. Схема процесса показана ниже.
В Project's build.gradle добавьте адрес репозитория:
allprojects {
repositories {
...
maven { url 'https://www.jitpack.io' }
}
}
В Model:app's build.gradle добавить зависимость от фреймворка:
Актуальную версию можно найти в Releases
dependencies {
implementation 'com.github.goweii:AnyPermission:1.0.0'
}
private void requestRuntime() {
mRuntimeRequester = AnyPermission.with(this).runtime(1)
.permissions(Manifest.permission.CAMERA,
Manifest.permission.CALL_PHONE)
.onBeforeRequest(new RequestInterceptor<String>() {
@Override
public void interceptor(@NonNull final String permission, @NonNull final Executor executor) {
// TODO 在每个 разрешении запроса перед вызовом, много раз обратный вызов. Можно всплывающее окно, чтобы объяснить пользователю, что следующее разрешение будет запрошено.
// processor имеет два метода, один из которых должен быть вызван, иначе процесс запроса будет остановлен.
}
})
.onBeenDenied(new RequestInterceptor<String>() {
@Override
public void interceptor(@NonNull final String permission, @NonNull final Executor executor) {
// TODO После каждого отказа в разрешении, много раз обратный вызов. Можно использовать всплывающее окно для объяснения пользователю, почему требуется это разрешение, иначе пользователь может отключить подсказку при следующем запросе.
// processor имеет два метода, один из которых должен быть вызван, иначе процесс запроса будет остановлен.
}
})
.onGoSetting(new RequestInterceptor<String>() {
@Override
public void interceptor(@NonNull final String permission, @NonNull final Executor executor) {
// TODO После постоянного отказа в разрешении (пользователь отключил подсказку), много раз обратный вызов. Можно использовать всплывающее окно, чтобы направить пользователя к настройкам для включения разрешения, вызов executor.execute() автоматически перейдёт к настройкам.
// processor имеет два метода, один из которых должен быть вызван, иначе процесс запроса будет остановлен.
}
})
.request(new RequestListener() {
@Override
protected void onActivityResult(int requestCode, int resultCode, @Nullable Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if (mRuntimeRequester != null) {
mRuntimeRequester.onActivityResult(requestCode);
}
}
@Override
public void onSuccess() {
// TODO Разрешение получено успешно
}
@Override
public void onFailed() {
// TODO Получение разрешения не удалось
}
});
}
@Override
``` **Доступ к уведомлению**
AnyPermission.with(this).notificationShow() .onWithoutPermission(new RequestInterceptor() { @Override public void interceptor(@NonNull final Void data, @NonNull final Executor executor) { // TODO 在申请显示通知权限之前调用,可在此项用户弹窗提示。 // processor有两个方法,必须调用其一,否则申请流程将终止。 } }) .request(new RequestListener() { @Override public void onSuccess() { // TODO 授权成功 }
@Override
public void onFailed() {
// TODO 访问权限失败
}
});
**Доступ к уведомлениям**
AnyPermission.with(this).notificationAccess() .onWithoutPermission(new RequestInterceptor() { @Override public void interceptor(@NonNull final Void data, @NonNull final Executor executor) { // TODO 在申请访问通知权限之前调用,可在此项用户弹窗提示。 // processor有两个方法,必须调用其一,否则申请流程将终止。 } }) .request(new RequestListener() { @Override public void onSuccess() { // TODO 授权成功 }
@Override
public void onFailed() {
// TODO 授权失败
}
});
# API
## RequestInterceptor<T>
В процессе запроса разрешения используется для уведомления пользователя через всплывающее окно.
```java
void interceptor(@NonNull final T data, @NonNull final Executor executor)
Управляет выполнением или отменой процесса.
/**
* Продолжить процесс
**/
void execute()
/**
* Отменить процесс, то есть вернуться к неудачному запросу
**/
void cancel()
Все пять типов разрешений инициируются этим методом.
/**
* Создание экземпляра AnyPermission
**/
public static AnyPermission with(@NonNull final Context context)
public static AnyPermission with(@NonNull final Activity activity)
public static AnyPermission with(@NonNull final Fragment fragment)
public static AnyPermission with(@NonNull final android.app.Fragment fragment)
/**
* Получение имени определённого разрешения
**/
public String name(String permission)
/**
* Получить Uri файла
**/
public Uri fileUri(File file)
/**
* Получить экземпляр класса реализации запроса разрешения во время выполнения
**/
public RuntimeRequester runtime(int requestCodeWhenGoSetting)
/**
* Получить экземпляр класса реализации неизвестного запроса разрешения на установку приложения
**/
public InstallRequester install(File apkFile)
/**
* Получить экземпляр класса реализации запроса разрешения на плавающее окно
**/
public OverlayRequester overlay()
/**
* Получить экземпляр класса реализации запроса разрешения на показ уведомлений
**/
public NotificationShowRequester notificationShow()
/**
* Получить экземпляр класса реализации запроса разрешения на доступ к уведомлениям
**/
public NotificationAccessRequester notificationAccess()
Запрос разрешения во время работы.
/**
* Необходимые разрешения
**/
public RuntimeRequester permissions(String... permissions)
/**
* Обратный вызов перед каждым запросом разрешения
**/
public RuntimeRequester onBeforeRequest(RequestInterceptor<String> onBeforeRequest)
/**
* Обратный вызов после каждого отказа в разрешении
**/
public RuntimeRequester onBeenDenied(RequestInterceptor<String> onBeenDenied)
/**
* Обратный вызов после постоянного отказа в разрешении
**/
public RuntimeRequester onGoSetting(RequestInterceptor<String> onGoSetting)
/**
* Начать запрос
**/
public RuntimeRequester request(@NonNull RequestListener listener)
/**
* Необходимо вызвать из метода onActivityResult() в Activity при возврате со страницы настроек
**/
public void onActivityResult(int requestCode)
Запрос неизвестного разрешения на установку приложения.
/**
* Перед переходом на страницу настроек, если разрешение не предоставлено
**/
public InstallRequester onWithoutPermission(RequestInterceptor<File> onWithoutPermission)
/**
* Запрос разрешения
**/
public void request(final RequestListener listener)
Запрос разрешения на плавающие окна.
/**
* Перед переходом на страницу настроек, если разрешение не предоставлено
**/
public OverlayRequester onWithoutPermission(RequestInterceptor<Void> onWithoutPermission)
/**
* Запрос разрешения
**/
public void request(final RequestListener listener)
Запрос разрешения на отображение уведомлений.
/**
* Перед переходом на страницу настроек, если разрешение не предоставлено
**/
public NotificationShowRequester onWithoutPermission(RequestInterceptor<Void> onWithoutPermission)
/**
* Запрос разрешения
**/
public void request(final RequestListener listener)
Запрос разрешения на доступ к уведомлениям.
/**
* Перед переходом на страницу настроек, если разрешение не предоставлено
**/
public NotificationAccessRequester onWithoutPermission(RequestInterceptor<Void> onWithoutPermission)
/**
* Запрос разрешения
**/
public void request(final RequestListener listener)
Вы можете оставить комментарий после Вход в систему
Неприемлемый контент может быть отображен здесь и не будет показан на странице. Вы можете проверить и изменить его с помощью соответствующей функции редактирования.
Если вы подтверждаете, что содержание не содержит непристойной лексики/перенаправления на рекламу/насилия/вульгарной порнографии/нарушений/пиратства/ложного/незначительного или незаконного контента, связанного с национальными законами и предписаниями, вы можете нажать «Отправить» для подачи апелляции, и мы обработаем ее как можно скорее.
Комментарии ( 0 )