权限使用AndPermission

1,132 阅读1分钟

使用步骤

参考官网:github.com/yanzhenjie/…

注意:不要使用2.0.3 版本,可能下载不下来依赖

1、导入依赖

implementation 'com.yanzhenjie:permission:2.0.2'

2、实例代码

        val permissions = arrayOf(
            Permission.CAMERA,
            Permission.READ_EXTERNAL_STORAGE,
            Permission.READ_PHONE_STATE
        )

        AndPermission.with(this)
            .runtime()
            .permission(permissions)
            .onGranted {
                Log.e(TAG, "onGranted执行")
                Log.e(TAG, "相机初始化操作")
                Log.e(TAG, "存储状态初始化操作")
                Log.e(TAG, "读取通话状态初始化操作")
            }
            .onDenied {
                // 通过下面的方式来控制
                if (AndPermission.hasPermissions(mContext, Permission.READ_PHONE_STATE)) {
                    Log.e(TAG, "可以读取通话状态")
                    Log.e(TAG, "读取通话状态初始化操作")
                } else {
                    Log.e(TAG, "不可以读取通话状态")
                    // 总是拒绝
                    if (AndPermission.hasAlwaysDeniedPermission(
                            mContext,
                            Permission.READ_PHONE_STATE
                        )
                    ) {
                        Log.e(TAG, "总是拒绝读取通话状态")
                    }
                }

                if (AndPermission.hasPermissions(mContext, Permission.READ_EXTERNAL_STORAGE)) {
                    Log.e(TAG, "可以获取存储状态")
                    Log.e(TAG, "存储状态初始化操作")
                } else {
                    Log.e(TAG, "不可以获取存储状态")
                    if (AndPermission.hasAlwaysDeniedPermission(
                            mContext,
                            Permission.READ_EXTERNAL_STORAGE
                        )
                    ) {
                        Log.e(TAG, "总是拒绝存储权限")
                    }
                }

                if (AndPermission.hasPermissions(mContext, Permission.CAMERA)) {
                    Log.e(TAG, "可以获取相机状态")
                    Log.e(TAG, "相机初始化操作")
                } else {
                    Log.e(TAG, "不可以获取相机状态")
                    if (AndPermission.hasAlwaysDeniedPermission(mContext, Permission.CAMERA)) {
                        // 打开权限设置页
                        Log.e(TAG, "总是拒绝相机权限")
                    }
                }
            }
            .start()

使用问题

1、如果有3个权限,比如 Permission.CAMERA,Permission.READ_EXTERNAL_STORAGE 一个同意,一个不同意,那么它是不走onGranted方法,这样逻辑处理就比较麻烦,没有办法精细处理,为了防止权限通过以后的多次初始化的操作,必须借助本地的变量进行设置。

2、如果使用下面的方式进行多个权限的申请,会出现问题,一个权限会被覆盖。

        AndPermission.with(this)
            .runtime()
            .permission(Permission.Group.STORAGE)
            .onGranted {

            }.onDenied {

            }.start()
        
        AndPermission.with(this)
            .runtime()
            .permission(Permission.Group.CAMERA)
            .onGranted {

            }.onDenied {

            }.start()
    }