Dexter 1.0:
Dexter — это библиотека для OpenHarmonyOS, которая упрощает процесс запроса разрешений во время выполнения.
Dexter позволяет пользователям предоставлять или отказывать в разрешениях при запуске приложения, вместо того чтобы предоставлять их все при установке. Такой подход даёт пользователю больше контроля над приложениями, но требует от разработчиков добавления большого количества кода для его поддержки.
Dexter освобождает ваш код разрешений от действий и позволяет вам писать эту логику где угодно.
Скриншоты:
Использование:
Запуск требования: Через DevEco studio и загрузку SDK. В файле build.gradle проекта измените версию classpath на соответствующую версию (то есть версию, которую вы используете в новом проекте IDE).
Способ два:
allprojects{
repositories{
mavenCentral()
}
}
implementation 'io.openharmony.tpc.thirdlib:dexter:1.0.2'
Зависимость: Чтобы начать использовать библиотеку, просто вызовите Dexter с допустимым Context, добавьте onRequestPermissionsFromUserResult.
Пример:
public MainAbility extends Ability {
@Override
public void onStart(Intent intent) {
super.onStart(intent);
Dexter.withContext(this)
.withPermission(permission)
.withListener(listener)
.check();
}
}
@Override
public void onRequestPermissionsFromUserResult(int requestCode, String[] permissions, int[] grantResults) {
super.onRequestPermissionsFromUserResult(requestCode, permissions, grantResults);
Dexter.onRequestPermissionsFromUserResult(requestCode,permissions,grantResults);
}
Одно разрешение: Для каждого разрешения зарегистрируйте реализацию PermissionListener, чтобы получать состояние запроса:
Пример:
Dexter.withContext(this)
.withPermission(SystemPermission.CAMERA)
.withListener(new PermissionListener() {
@Override public void onPermissionGranted(PermissionGrantedResponse response) {/* ... */}
@Override public void onPermissionDenied(PermissionDeniedResponse response) {/* ... */}
@Override public void onPermissionRationaleShouldBeShown(PermissionRequest permission, PermissionToken token) {/* ... */}
}).check();
Чтобы упростить вашу жизнь, мы предлагаем некоторые реализации PermissionListener для выполнения повторяющихся действий:
Пример:
PermissionListener dialogPermissionListener =
DialogOnDeniedPermissionListener.Builder
.withContext(context)
.withTitle("Camera permission")
.withMessage("Camera permission is needed to take pictures of your cat")
.withButtonText("ok")
.withIcon(R.mipmap.my_icon)
.build();
Пример:
PermissionListener popupOnPermissionListener =
PopupOnDeniedPermissionListener.Builder
.with(view, "Camera access is needed to take pictures of your dog")
.withOpenSettingsButton("Settings")
.build();
Пример:
PermissionListener popupOnPermissionListener = /*...*/;
PermissionListener dialogPermissionListener = /*...*/;
PermissionListener compositePermissionListener = new CompositePermissionListener(popupOnPermissionListener, dialogPermissionListener, /*...*/);
``` ### Множественные разрешения
Если вы хотите запросить множественные разрешения, вам просто нужно вызвать `withPermissions` и зарегистрировать реализацию `MultiplePermissionsListener`:
```java
Dexter.withContext(this)
.withPermissions(
SystemPermission.CAMERA,
SystemPermission.LOCATION
).withListener(new MultiplePermissionsListener() {
@Override public void onPermissionsChecked(MultiplePermissionsReport report) {/* ... */}
@Override public void onPermissionRationaleShouldBeShown(List<PermissionRequest> permissions, PermissionToken token) {/* ... */}
}).check();
MultiplePermissionsReport
содержит все детали запроса на разрешение, такие как список запрещённых/предоставленных разрешений или служебные методы, такие как areAllPermissionsGranted
и isAnyPermissionPermanentlyDenied
.
Как и в случае с одним слушателем разрешений, есть также несколько полезных реализаций для повторяющихся шаблонов:
BaseMultiplePermissionsListener
, чтобы упростить реализацию только тех методов, которые вы хотите. Имейте в виду, что вы не должны вызывать методы super
, когда переопределяете их.DialogOnAnyDeniedMultiplePermissionsListener
для отображения настраиваемого диалога всякий раз, когда пользователь отклоняет хотя бы одно разрешение:MultiplePermissionsListener dialogMultiplePermissionsListener =
DialogOnAnyDeniedMultiplePermissionsListener.Builder
.withContext(context)
.withTitle("Camera & audio permission")
.withMessage("Both camera and audio permission are needed to take pictures of your cat")
.withButtonText("ok")
.withIcon(R.mipmap.my_icon)
.build();
PopupOnAnyDeniedMultiplePermissionsListener
для показа сообщения PopupDialog
всякий раз, когда пользователь отвергает любое из запрошенных разрешений:MultiplePermissionsListener popupOnAnyDeniedMultiplePermissionsListener =
PopupOnAnyDeniedMultiplePermissionsListener.Builder
.with(view, "Camera and audio access is needed to take pictures of your dog")
.withOpenSettingsButton("Settings")
.build();
CompositePermissionListener
для объединения нескольких слушателей в один:MultiplePermissionsListener popupOnAnyDeniedMultiplePermissionsListener = /*...*/;
MultiplePermissionsListener dialogMultiplePermissionsListener = /*...*/;
MultiplePermissionsListener compositePermissionsListener = new CompositeMultiplePermissionsListener(snackbarMultiplePermissionsListener, dialogMultiplePermissionsListener, /*...*/);
Dexter.withContext(this)
.withPermissions(SystemPermission.CAMERA,SystemPermission.LOCATION)
.withListener(compositePermissionsListener)
.withErrorListener(new PermissionRequestErrorListener() {
@Override public void onError(DexterError error) {
Log.e("Dexter", "There was an error: " + error.toString());
}
})
.check();
//это способность, если можно, у родителей способности добавить это.
@Override
public void onRequestPermissionsFromUserResult(int requestCode, String[] permissions, int[] grantResults) {
super.onRequestPermissionsFromUserResult(requestCode, permissions, grantResults);
Dexter.onRequestPermissionsFromUserResult(requestCode,permissions,grantResults);
}
Если вы хотите получать обратные вызовы слушателя разрешений в том же потоке, который инициировал запрос разрешения, вам нужно просто вызвать onSameThread
перед проверкой разрешений:
Dexter.withContext(context)
.withPermission(permission)
.withListener(listener)
.onSameThread()
.check();
Harmony уведомит вас, когда вы запрашиваете разрешение, которое требует дополнительного объяснения его использования, либо потому, что оно считается опасным, либо потому что пользователь уже отказался от него. Разрешение
Dexter вызовет метод onPermissionRationaleShouldBeShown
, реализованный в вашем слушателе, с помощью PermissionToken
. Важно помнить, что процесс запроса будет приостановлен до тех пор, пока токен не будет использован, поэтому вы не сможете снова вызвать Dexter или запросить какие-либо другие разрешения, если токен не был использован.
Самая простая реализация вашего метода onPermissionRationaleShouldBeShown
может быть такой:
@Override public void onPermissionRationaleShouldBeShown(PermissionRequest permission, PermissionToken token) {
token.continuePermissionRequest();
}
Обработка ошибок
Если вы считаете, что в вашей интеграции с Dexter есть ошибка, просто зарегистрируйте PermissionRequestErrorListener
при вызове Dexter:
Dexter.withContext(context)
.withPermission(permission)
.withListener(listener)
.withErrorListener(new PermissionRequestErrorListener() {
@Override public void onError(DexterError error) {
Log.e("Dexter", "Произошла ошибка: " + error.toString());
}
}).check();
Библиотека уведомит вас, когда что-то пойдёт не так. В целом рекомендуется хотя бы регистрировать все ошибки, которые может выдать Dexter, но это остаётся на усмотрение разработчика.
Лицензия
Copyright 2015 Karumi
Licensed under the Apache License, Version 2.0 (the «License»); you may not use this file except in compliance with the License. You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an «AS IS» BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License.
Вы можете оставить комментарий после Вход в систему
Неприемлемый контент может быть отображен здесь и не будет показан на странице. Вы можете проверить и изменить его с помощью соответствующей функции редактирования.
Если вы подтверждаете, что содержание не содержит непристойной лексики/перенаправления на рекламу/насилия/вульгарной порнографии/нарушений/пиратства/ложного/незначительного или незаконного контента, связанного с национальными законами и предписаниями, вы можете нажать «Отправить» для подачи апелляции, и мы обработаем ее как можно скорее.
Комментарии ( 0 )