1 В избранное 0 Ответвления 0

OSCHINA-MIRROR/goweii-AnyPermission

Присоединиться к Gitlife
Откройте для себя и примите участие в публичных проектах с открытым исходным кодом с участием более 10 миллионов разработчиков. Приватные репозитории также полностью бесплатны :)
Присоединиться бесплатно
Клонировать/Скачать
Внести вклад в разработку кода
Синхронизировать код
Отмена
Подсказка: Поскольку Git не поддерживает пустые директории, создание директории приведёт к созданию пустого файла .keep.
Loading...
README.md

AnyPermission

GitHub主页

Demo下载

概述

Является обёрткой для AndPermission, предназначена для быстрого запроса разрешений на Android, с возможностью цепного вызова и адаптации к большинству отечественных систем.

  • Разрешение во время выполнения
  • Разрешение на установку неизвестных приложений
  • Разрешение на всплывающее окно
  • Разрешение на отображение уведомлений
  • Разрешение на доступ к уведомлениям

При запросе нескольких разрешений в рамках этого фреймворка используется метод очереди: сначала запрашивается первое разрешение, после успешного запроса первого разрешения выполняется запрос следующего разрешения, а при неудачном запросе первого разрешения весь запрос завершается неудачно. Схема процесса показана ниже.

流程图

Быстрая интеграция

Шаг 1: Добавить адрес репозитория

В Project's build.gradle добавьте адрес репозитория:

allprojects {
    repositories {
        ...
        maven { url 'https://www.jitpack.io' }
    }
}

Шаг 2: Добавить зависимость от фреймворка

В 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)

Executor

Управляет выполнением или отменой процесса.

/**
 * Продолжить процесс
 **/
void execute()

/**
 * Отменить процесс, то есть вернуться к неудачному запросу
 **/
void cancel()

AnyPermission

Все пять типов разрешений инициируются этим методом.

/**
* Создание экземпляра 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()

RuntimeRequester

Запрос разрешения во время работы.

/**
* Необходимые разрешения
**/
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)

InstallRequester

Запрос неизвестного разрешения на установку приложения.

/**
* Перед переходом на страницу настроек, если разрешение не предоставлено
**/
public InstallRequester onWithoutPermission(RequestInterceptor<File> onWithoutPermission)

/**
* Запрос разрешения
**/
public void request(final RequestListener listener)

OverlayRequester

Запрос разрешения на плавающие окна.

/**
* Перед переходом на страницу настроек, если разрешение не предоставлено
**/
public OverlayRequester onWithoutPermission(RequestInterceptor<Void> onWithoutPermission)

/**
* Запрос разрешения
**/
public void request(final RequestListener listener)

NotificationShowRequester

Запрос разрешения на отображение уведомлений.

/**
* Перед переходом на страницу настроек, если разрешение не предоставлено
**/
public NotificationShowRequester onWithoutPermission(RequestInterceptor<Void> onWithoutPermission)

/**
* Запрос разрешения
**/
public void request(final RequestListener listener)

NotificationAccessRequester

Запрос разрешения на доступ к уведомлениям.

/**
* Перед переходом на страницу настроек, если разрешение не предоставлено
**/
public NotificationAccessRequester onWithoutPermission(RequestInterceptor<Void> onWithoutPermission)

/**
* Запрос разрешения
**/
public void request(final RequestListener listener)

Часто задаваемые вопросы

Пока нет

Комментарии ( 0 )

Вы можете оставить комментарий после Вход в систему

Введение

Описание недоступно Развернуть Свернуть
LGPL-3.0
Отмена

Обновления

Пока нет обновлений

Участники

все

Недавние действия

Загрузить больше
Больше нет результатов для загрузки
1
https://api.gitlife.ru/oschina-mirror/goweii-AnyPermission.git
git@api.gitlife.ru:oschina-mirror/goweii-AnyPermission.git
oschina-mirror
goweii-AnyPermission
goweii-AnyPermission
master