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

你可能感兴趣的:(RxPermissions:动态权限申请)