RxPermissions:動態權限申請

參考:

tbruyelle / RxPermissions

RxPermission權限申請

依賴導入


allprojects {
    repositories {
        ...
        maven { url 'https://jitpack.io' }
    }
}

dependencies {
    implementation 'com.github.tbruyelle:rxpermissions:0.10.2'
}

request : 返回是否【都通過權限】的Boolean值


    /**
     * 申請單個權限
     * 1、返回true:申請成功 ;返回false:申請失敗
     * 2、同意後,之後再申請此權限則不再彈出提示框
     * 3、不要使用compose方法,如RxLifeCycle
     */
    @SuppressLint("CheckResult")
    fun request1(activity: FragmentActivity?) {
        val permissions = RxPermissions(activity!!)
        permissions.setLogging(true)
        permissions.request(Manifest.permission.READ_EXTERNAL_STORAGE)
            .subscribe { t ->
                println("申請單個權限========================================$t")
            }
    }


    /**
     * 申請多個權限
     * 1、只要有一個禁止,則返回false;全部同意,則返回true。
     * 2、某個權限同意後,之後再申請此權限則不再彈出提示框,其他的會繼續彈出
     * 3、此申請三個權限,但只會有兩個彈窗,
     * READ_EXTERNAL_STORAGE和WRITE_EXTERNAL_STORAGE 是屬於一組,
     */
    @SuppressLint("CheckResult")
    fun request2(activity: FragmentActivity?) {
        val permissions = RxPermissions(activity!!)
        permissions.setLogging(true)
        permissions.request(
            Manifest.permission.READ_EXTERNAL_STORAGE,
            Manifest.permission.WRITE_EXTERNAL_STORAGE,
            Manifest.permission.READ_CALENDAR
        ).subscribe { t ->
            println("申請多個權限========================================$t")
        }
    }

requestEach : 獲取每個權限申請的信息,通過name自行過濾


    /**
     * 申請單個權限,獲得詳細信息
     */
    @SuppressLint("CheckResult")
    fun requestEach1(activity: FragmentActivity?) {
        val permissions = RxPermissions(activity!!)
        permissions.setLogging(true)
        permissions.requestEach(Manifest.permission.READ_EXTERNAL_STORAGE)
            .subscribe { permission ->
                printRequestEach(permission, Manifest.permission.READ_EXTERNAL_STORAGE)
            }
    }

    /**
     * 申請多個權限,獲得詳細信息
     */
    @SuppressLint("CheckResult")
    fun requestEach2(activity: FragmentActivity?) {
        val permissions = RxPermissions(activity!!)
        permissions.setLogging(true)
        permissions.requestEach(
            Manifest.permission.READ_EXTERNAL_STORAGE,
            Manifest.permission.WRITE_EXTERNAL_STORAGE,
            Manifest.permission.READ_CALENDAR
        ).subscribe { permission ->
            printRequestEach(permission, Manifest.permission.READ_EXTERNAL_STORAGE)
            printRequestEach(permission, Manifest.permission.WRITE_EXTERNAL_STORAGE)
            printRequestEach(permission, Manifest.permission.READ_CALENDAR)
        }
    }

    private fun printRequestEach(permission: Permission, targetPermission: String) {
        if (permission.name.equals(targetPermission, true)) {
            when {
                permission.granted -> {
                    //同意後調用
                    println(
                        "printRequestEach--:" +
                                "-${permission.name}-: 同意"
                    )
                }
                permission.shouldShowRequestPermissionRationale -> {
                    //禁止,但沒有選擇“以後不再詢問”,以後申請權限,會繼續彈出提示
                    println(
                        "printRequestEach--:" +
                                "-${permission.name}-: 禁止但以後還能詢問 "
                    )
                }
                else -> {
                    //禁止,但選擇“以後不再詢問”,以後申請權限,不會繼續彈出提示
                    println(
                        "printRequestEach--:" +
                                "-${permission.name}-: 禁止並以後不再詢問"
                    )
                }
            }
        }
    }

訂閱的permission : 單個權限名稱,如:


android.permission.READ_EXTERNAL_STORAGE

requestEachCombined : 獲取所有權限申請的聚合信息


    @SuppressLint("CheckResult")
    fun checkPermissionRequestEachCombined(activity: FragmentActivity?) {
        val permissions = RxPermissions(activity!!)
        permissions.setLogging(true)
        permissions.requestEachCombined(
            Manifest.permission.READ_EXTERNAL_STORAGE,
            Manifest.permission.WRITE_EXTERNAL_STORAGE,
            Manifest.permission.READ_CALENDAR
        ).subscribe { permission ->
            when {
                permission.granted -> {
                    //全部同意後調用
                    println(
                        "requestEachCombined===============" +
                                "${permission.name} =========同意 "
                    );
                }
                permission.shouldShowRequestPermissionRationale -> {
                    //只要有一個選擇:禁止,但沒有選擇“以後不再詢問”,以後申請權限,會繼續彈出提示
                    //permission.name : 
                    // “android.permission.READ_EXTERNAL_STORAGE, 
                    //  android.permission.WRITE_EXTERNAL_STORAGE, 
                    //  android.permission.READ_CALENDAR”
                    //名字爲逗號連接的一個字符串
                    println(
                        "requestEachCombined===============" +
                                "${permission.name} =========禁止但以後還能詢問"
                    );
                }
                else -> {
                    //只要有一個選擇:禁止,但選擇“以後不再詢問”,以後申請權限,不會繼續彈出提示
                    println(
                        "requestEachCombined===============" +
                                "${permission.name} =========禁止並以後不再詢問"
                    );
                }
            }
        }
    }

訂閱的permission : 多個權限名稱以逗號連接成一個字符串,如:


android.permission.READ_EXTERNAL_STORAGE,android.permission.READ_CALENDAR

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章