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

OSCHINA-MIRROR/hm0603-XmPermissionsProject

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

XmPermissions

Проект представляет собой:

Android-фреймворк для динамического запроса разрешений.

Адрес на Github: https://github.com/lhm0603/XmPermissionsProject

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

XmPermissions поддерживает Android 5.0 и более поздние версии, а до Android 6.0 разрешения по умолчанию предоставляются сразу.

Начало использования

Импорт XmPermissions

Используйте Android Studio или другую систему сборки с использованием Gradle:

dependencies {
    //другие зависимости
    implementation 'com.xm.permissions:XmPermissions:1.0.2'
}

Применение XmPermissions

Добавьте в файл AndroidManifest.xml необходимые вашему приложению разрешения:

<?xml version="1.0" encoding="utf-8"?>
<manifest package="com.lin.example.epa"                     
    xmlns:android="http://schemas.android.com/apk/res/android">

    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
    <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>
    <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION"/>
    <uses-permission android:name="android.permission.CALL_PHONE"/>
    <uses-permission android:name="android.permission.WRITE_CALL_LOG"/>

    <application>
    </application>
</manifest>

В Activity, где требуется запросить разрешение, создайте экземпляр XmPermissions и реализуйте необходимые обратные вызовы:

class IndexActivity : AppCompatActivity() {
    /**
     * Создание экземпляра XmPermissions.
     */
    private val xmPermissions = XmPermissions.newInstance(this)

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_index)
        // Запрос необходимых разрешений по мере необходимости
//        xmPermissions.requestPermissions(getString(R.string.InvalidPermissionText), Manifest.permission.CALL_PHONE, Manifest.permission.CAMERA)

        // Запрашиваем все разрешения, указанные в конфигурационном файле (не рекомендуется)
        xmPermissions.requestAllPermissions()
    }

    override fun onRequestPermissionsResult(requestCode: Int, permissions: Array<out String>, grantResults: IntArray) {
        super.onRequestPermissionsResult(requestCode, permissions, grantResults)
        // Необходимо вызвать этот метод и передать параметры методу XmPermissions
        xmPermissions.onRequestPermissionsResult(requestCode, permissions, grantResults)
    }

    override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) {
        super.onActivityResult(requestCode, resultCode, data)
        // Необходимо вызвать этот метод и передать параметры методу XmPermissions
        xmPermissions.onActivityResult(requestCode)
    }
}

PS: При запросе разрешений рекомендуется следовать правилам Android:

  1. Запрашивать конкретные разрешения только перед выполнением действий, требующих этих разрешений.
  2. Перед запросом разрешений следует явно уведомить пользователя о том, какие действия будут выполняться после предоставления разрешений. Это можно сделать через всплывающее окно или полноэкранное уведомление.
  3. Запрашивать только те разрешения, которые необходимы для работы приложения. Не запрашивать разрешения, не связанные с приложением.
  4. Даже если пользователь отклонил запрос на разрешение, приложение должно стараться предоставить пользователю доступ к функциям, которые не требуют этого разрешения.

Дополнительные правила см. по ссылке: https://developer.android.google.cn/guide/topics/permissions/overview

Вам может быть интересно узнать о результатах запроса разрешений, поэтому вы можете установить обратный вызов для XmPermissions с помощью метода setOnRequestPermissionsCallback:

interface OnRequestPermissionsCallback {
    /**
     * Все запрошенные разрешения были предоставлены.
     */
    fun onGranted()

    /**
     * Часть запрошенных разрешений была отклонена.
     */
    fun onDenied(deniedPermissions: Array<String>)

    /**
     * Часть запрошенных разрешений была навсегда отклонена.
     */
    fun onPermanentlyDenied(deniedPermissions: Array<String>)

    /**
     * После возвращения из настроек некоторые запрошенные разрешения всё ещё не предоставлены.
     */
    fun onSettingBackDenied(deniedPermissions: Array<String>)
}

Пусть Activity реализует этот интерфейс или создаст класс, который его реализует, и вызовет соответствующие методы:

// Activity реализует интерфейс OnRequestPermissionsCallback и переопределяет соответствующие функции
class IndexActivity : AppCompatActivity(), OnRequestPermissionsCallback {
    private val xmPermissions = XmPermissions.newInstance(this)

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_index)
        // Устанавливаем прослушиватель обратного вызова для запроса разрешений
        xmPermissions.setOnRequestPermissionsCallback(this)
        xmPermissions.requestAllPermissions()
    }
    
    // Опускаем часть кода...
    
    // Все разрешения предоставлены пользователем, можно приступать к работе
    override fun onGranted() {
        Toast.makeText(this, R.string.userGrantedAllPermission, Toast.LENGTH_LONG).show()
    }

    // Часть разрешений была отклонена пользователем, функциональность ограничена, необходимо дружественное уведомление пользователя
    override fun onDenied(deniedPermissions: Array<String>) {
        Toast.makeText(this, R.string.userDeniedSomePermission, Toast.LENGTH_LONG).show()
    }

    // Некоторые разрешения были отклонены пользователем несколько раз или пользователь напрямую отклонил их и выбрал опцию «больше не спрашивать». Это означает, что в следующий раз система не будет предлагать разрешения, которые были отклонены навсегда.
    
}
``` Вот перевод текста на русский язык:

而是直接被拒绝,这里建议可以再次告知用户,为什么需要该权限,没有该权限功能受阻等。并提供UI让用户可以跳转到设置界面去手动打开相应的权限。
    // Можно вызвать xmPermissions.jumpToSettingPermissionPage(), внутренняя реализация функции перехода на страницу настроек приложения. И также сделана обработка обратного вызова при переходе обратно из настроек в приложение
    override fun onPermanentlyDenied(deniedPermissions: Array<String>) {
        AlertDialog.Builder(this).setTitle(R.string.somePermissionsPromptAgain)
                .setMessage(String.format(Locale.CHINA, getString(R.string.deniedPermissions), deniedPermissions.contentToString()))
                .setPositiveButton(R.string.to_open) { _, _ ->
                    xmPermissions.jumpToSettingPermissionPage()
                }.setNegativeButton(R.string.cancel) { _, _ ->
                    onDenied(deniedPermissions)
                }.setCancelable(false).show()
    }

    // Данный метод будет вызван, если пользователь перешёл в настройки, но не открыл необходимые разрешения, и затем вернулся в приложение. Это также означает, что разрешение не было успешно запрошено
    override fun onSettingBackDenied(deniedPermissions: Array<String>) {
        Toast.makeText(this, R.string.backSettingsDeniedPermissions, Toast.LENGTH_LONG).show()
    }
}

Лицензия

Copyright 2020 Huaming Lin.

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 )

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

Введение

**Android: динамическое применение разрешений** В этой статье мы рассмотрим структуру динамического применения разрешений в Android. Динамическое применение разрешений позволяет приложениям запрашивать разрешения у пользователей во время выполнения программы, а не при установке приложения. Это может быть полезно для приложений, которым требует... Развернуть Свернуть
Apache-2.0
Отмена

Обновления (2)

все

Участники

все

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

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