PermissionsDispatcher
PermissionsDispatcher предоставляет простой основанный на комментариях API для обработки разрешений во время выполнения. Библиотека снижает нагрузку, связанную с написанием множества проверочных операторов (независимо от того, предоставлены ли вам разрешения), и помогает поддерживать чистоту и безопасность кода.
Использование
Существует внутренний простой пример, который можно использовать в качестве ориентира.
Требования к запуску entry
Примечание: В китайском пути сборка Debug Hap(s) завершится неудачно. Рекомендуется размещать проект в полностью английском каталоге.
"reqPermissions": [
{
"name": "ohos.permission.CAMERA"
}
]
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);
}
Проблемы
— Соберите проект, затем в папке entry->build->generated->sources->annotationProcessor->java->main->с папкой, соответствующей пакету, после сборки автоматически сгенерируйте файл. По причине студии его нельзя напрямую связать с файлом в этой папке. Сгенерируйте соответствующий xxPermissionDispatcher для ability/slice.
— В папке entry->build->generated->sources выберите Mark Directory как -> выберите Generated Source Root. Затем в ability или slice можно ссылаться.
См. Лицензию для ознакомления с конкретным языком, регулирующим разрешения и ограничения по Лицензии.
Вы можете оставить комментарий после Вход в систему
Неприемлемый контент может быть отображен здесь и не будет показан на странице. Вы можете проверить и изменить его с помощью соответствующей функции редактирования.
Если вы подтверждаете, что содержание не содержит непристойной лексики/перенаправления на рекламу/насилия/вульгарной порнографии/нарушений/пиратства/ложного/незначительного или незаконного контента, связанного с национальными законами и предписаниями, вы можете нажать «Отправить» для подачи апелляции, и мы обработаем ее как можно скорее.
Опубликовать ( 0 )