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 |