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

OSCHINA-MIRROR/HarmonyOS-tpc-Dexter

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

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 для выполнения повторяющихся действий:

  • BasePermissionListener, чтобы упростить реализацию только тех методов, которые вы хотите. Имейте в виду, что не следует вызывать методы super при их переопределении.
  • DialogOnDeniedPermissionListener для отображения настраиваемого диалога всякий раз, когда пользователь отклоняет запрос разрешения:

Пример:

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();
  • PopupOnDeniedPermissionListener для показа сообщения PopupDialog всякий раз, когда пользователь отклоняет запрос разрешения:

Пример:

PermissionListener popupOnPermissionListener =
    PopupOnDeniedPermissionListener.Builder
        .with(view, "Camera access is needed to take pictures of your dog")
        .withOpenSettingsButton("Settings")
        .build();
  • CompositePermissionListener для объединения нескольких слушателей в один:

Пример:

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 )

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

Введение

Описание недоступно Расширить Свернуть
Apache-2.0
Отмена

Обновления

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

Участники

все

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

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