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

OSCHINA-MIRROR/HarmonyOS-tpc-PermissionsDispatcher

Присоединиться к Gitlife
Откройте для себя и примите участие в публичных проектах с открытым исходным кодом с участием более 10 миллионов разработчиков. Приватные репозитории также полностью бесплатны :)
Присоединиться бесплатно
Клонировать/Скачать
README.md 8.3 КБ
Копировать Редактировать Web IDE Исходные данные Просмотреть построчно История
gitlife-traslator Отправлено 29.11.2024 20:09 6547918

PermissionsDispatcher

PermissionsDispatcher предоставляет простой основанный на комментариях API для обработки разрешений во время выполнения. Библиотека снижает нагрузку, связанную с написанием множества проверочных операторов (независимо от того, предоставлены ли вам разрешения), и помогает поддерживать чистоту и безопасность кода.

Использование

Существует внутренний простой пример, который можно использовать в качестве ориентира.

Требования к запуску entry

  1. Загрузите DevEco studio и SDK через DevEco studio 2.0+ и Native 2.0+.

Примечание: В китайском пути сборка Debug Hap(s) завершится неудачно. Рекомендуется размещать проект в полностью английском каталоге.

  1. Интегрируйте в entry gradle следующие операции:
  • Если вы используете har, поместите har в папку entry/libs.
  • Измените implementation fileTree(dir: 'libs', include: ['.jar','.har']) для добавления *.har.
  • Подготовьте config.json и build.gradle.
  1. Добавьте соответствующие разрешения в config.json:
"reqPermissions": [
      {
        "name": "ohos.permission.CAMERA"
      }
    ]
  1. В entry/build.gradle добавьте:
allprojects{
    repositories{
        mavenCentral()
    }
}
implementation 'io.openharmony.tpc.thirdlib:permissionsdispatcher-library:1.0.4'
implementation 'io.openharmony.tpc.thirdlib:permissionsdispatcher-processor:1.0.4'
annotationProcessor 'io.openharmony.tpc.thirdlib:permissionsdispatcher-processor:1.0.4'

1. Аннотации

PermissionsDispatcher вводит только несколько комментариев для сохранения простоты своего обычного API:

Annotation Required Description
@RuntimePermissions Регистрирует обработчики ability или slice для разрешений
@NeedsPermission Помечает метод, требующий одного или нескольких разрешений
@OnShowRationale Помечает способ объяснения пользователю, почему требуется разрешение. Он принимает объект PermissionRequest, который может быть использован для продолжения или отмены текущего запроса разрешения при вводе пользователя. Если методу не заданы параметры, компилятор генерирует методы proceed() и cancel(). Вы можете использовать эти методы вместо permissionRequest. proceed() для запроса разрешения. permissionRequest. cancel () отменяет запрос разрешения. Можно написать диалог для выбора
@OnPermissionDenied Помечает метод, вызываемый, если пользователь отклонил разрешение
@OnNeverAskAgain Помечает метод, вызываемый, когда пользователь выбирает «больше не спрашивать» разрешения

Пример использования аннотаций:

    @NeedsPermission(CAMERA_PERMISSION_NAME)
    public void toOpenPermission() {
        ToastUtil("Разрешение успешно запрошено");
    }

    @OnPermissionDenied(CAMERA_PERMISSION_NAME)
    public void toResetPermission() {
        ToastUtil("OnPermissionDenied разрешение отклонено");
    }

    @OnShowRationale(CAMERA_PERMISSION_NAME)
    public void showDialog(PermissionRequest request) {
        ToastUtil("showDialog объясняет причину необходимости открытия соответствующего разрешения, необходимо написать диалоговое окно выбора");
        // Подтвердить запрос
        request.proceed();
        // Отменить
//        request.cancel();
    }

    @OnNeverAskAgain(CAMERA_PERMISSION_NAME)
    public void toExplainPermission() {
        ToastUtil("OnNeverAskAgain объясняет, почему это разрешение было отклонено");
    }

2. Передача функций генерации

После создания соответствующего класса вызовите методы класса для начала запроса разрешений.

    @Override
    public void onStart(Intent intent) {
        super.onStart(intent);
          super.setUIContent(ResourceTable.Layout_ability_main);

        Button buttonStart = (Button) findComponentById(ResourceTable.Id_btn_main_apply);
        buttonStart.setClickedListener(new Component.ClickedListener() {
            @Override
            public void onClick(Component component) {
                //studio причина красного цвета, но также нормально работает, не паникуйте, в соответствующем entry->build->generated->sources файле выберите Mark Directory as -> выберите Generated Source Root.
                MainAbilityPermissionsDispatcher.toOpenPermissionWithPermissionCheck(MainAbility.this);
            }
        });
        
    }
 
Обратные вызовы метода
@Override
public void onRequestPermissionsFromUserResult(int requestCode, String[] permissions, int[] grantResults) {
   super.onRequestPermissionsFromUserResult(requestCode, permissions, grantResults);
   MainAbilityPermissionsDispatcher.onRequestPermissionsFromUserResult(this,requestCode,grantResults);
}

Проблемы

  1. Из-за временных проблем студии после сборки невозможно найти сгенерированный файл. Необходимо выполнить следующие действия:

— Соберите проект, затем в папке entry->build->generated->sources->annotationProcessor->java->main->с папкой, соответствующей пакету, после сборки автоматически сгенерируйте файл. По причине студии его нельзя напрямую связать с файлом в этой папке. Сгенерируйте соответствующий xxPermissionDispatcher для ability/slice.

— В папке entry->build->generated->sources выберите Mark Directory как -> выберите Generated Source Root. Затем в ability или slice можно ссылаться.

  1. Поскольку в slice нет метода onRequestPermissionsFromUserResult (xxx), информация о обратном вызове не может определить, были ли разрешения успешно получены или запрещены, что приводит к невозможности вызова методов, отмеченных @NeedsPermission и @OnNeverAskAgain после успешного или запрещённого запроса разрешений. Если иное не требуется по применимому законодательству или не согласовано в письменной форме, программное обеспечение, распространяемое по Лицензии, предоставляется на условиях «КАК ЕСТЬ», БЕЗ КАКИХ-ЛИБО ГАРАНТИЙ ИЛИ УСЛОВИЙ ЛЮБОГО РОДА, явных или подразумеваемых.

См. Лицензию для ознакомления с конкретным языком, регулирующим разрешения и ограничения по Лицензии.

Опубликовать ( 0 )

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

1
https://api.gitlife.ru/oschina-mirror/HarmonyOS-tpc-PermissionsDispatcher.git
git@api.gitlife.ru:oschina-mirror/HarmonyOS-tpc-PermissionsDispatcher.git
oschina-mirror
HarmonyOS-tpc-PermissionsDispatcher
HarmonyOS-tpc-PermissionsDispatcher
master