Android中利用PermissionX 库来简化权限请求

PermissionX简介

PermissionX是一个开源的Android库,用于简化运行时权限的请求流程,由<<第一行代码>>作者郭霖开发,适用于Android 6.0及以上系统中的动态权限问题.

项目地址:https://github.com/guolindev/PermissionX


PermissionX的主要特点

  • 支持同时申请多个权限
  • 支持权限说明弹窗(用户拒绝后解释原因)
  • 支持跳转设置页(用户永久拒绝权限时引导跳转)
  • 简单易用,链式调用,支持 Java 和 Kotlin
  • 自动处理敏感权限如:定位、存储、相机、电话等 ​

使用方法

1.添加依赖

dependencies {
   implementation ("com.guolindev.permissionx:permissionx:1.7.1")
}

2.初始化权限的方法

private fun requestPermissions() {
        // 创建一个可变的权限列表
        val permissions = mutableListOf(
            Manifest.permission.CAMERA, // 相机权限,用于拍照或录像
            Manifest.permission.READ_EXTERNAL_STORAGE, // 读取外部存储权限,用于访问设备上的文件
            Manifest.permission.POST_NOTIFICATIONS, // 发布通知权限,用于在 Android 13 及以上版本发送通知
            Manifest.permission.SCHEDULE_EXACT_ALARM // 安排精确闹钟权限,用于设置精确的闹钟或提醒
        )

        // 对于 Android 13 (API 33) 及以上版本,需要请求具体的图片和视频权限
        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.TIRAMISU) {
            // Android 13 引入了更细粒度的媒体权限
            permissions.add(Manifest.permission.READ_MEDIA_IMAGES) // 读取图片权限
            permissions.add(Manifest.permission.READ_MEDIA_VIDEO) // 读取视频权限
        }

        // 使用 PermissionX 库来处理权限请求
        PermissionX.init(this) // 初始化 PermissionX,传入当前的 Context
            .permissions(permissions) // 设置需要请求的权限列表
            .onExplainRequestReason { scope, deniedList ->
                // 当用户拒绝了某些权限但应用需要解释原因时触发此回调
                scope.showRequestReasonDialog(
                    deniedList, // 被拒绝的权限列表
                    "为了应用能够正常工作,请授予以下权限", 
                    "确定", 
                    "取消" 
                )
            }
            .onForwardToSettings { scope, deniedList ->
                // 当用户永久拒绝了某些权限(不再询问)时触发此回调,引导用户前往设置手动授予
                scope.showForwardToSettingsDialog(
                    deniedList, // 被永久拒绝的权限列表
                    "您需要在设置中手动授予以下权限",
                    "前往设置", 
                    "取消" 
                )
            }
            .request { allGranted, grantedList, deniedList ->
                // 权限请求结果回调
                // allGranted: Boolean,表示是否所有权限都已授予
                // grantedList: List<String>,已授予的权限列表
                // deniedList: List<String>,被拒绝的权限列表
                if (allGranted) {
                    Toast.makeText(this, "所有权限已授予", Toast.LENGTH_SHORT).show()
                } else {
                    Toast.makeText(this, "以下权限被拒绝:$deniedList", Toast.LENGTH_SHORT).show()
                }
            }
    }

总结

优点说明
简洁链式调用,省去大量模版代码
全面支持所有常用权限
易用提供引导窗口,提升用户体验
跨语言支持Java和Kotlin
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值