1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93
| 1️⃣ EasyPermissions(Google 官方推荐)
GitHub: https://github.com/googlesamples/easypermissions
特点:
基于 Activity/Fragment 封装权限请求
支持一次请求多个权限
自动处理“不再询问”提示
示例:
String[] perms = {Manifest.permission.CAMERA, Manifest.permission.RECORD_AUDIO}; if (EasyPermissions.hasPermissions(this, perms)) { // 已有权限 startCamera(); } else { EasyPermissions.requestPermissions( this, "需要相机和麦克风权限", 123, perms ); }
回调:
@Override public void onPermissionsGranted(int requestCode, @NonNull List<String> perms) { }
@Override public void onPermissionsDenied(int requestCode, @NonNull List<String> perms) { }
2️⃣ AndPermission
GitHub: https://github.com/yanzhenjie/AndPermission
特点:
API 更现代化,支持链式调用
支持权限分组、申请多个权限
支持“去设置页面引导”
示例:
AndPermission.with(this) .runtime() .permission(Permission.CAMERA, Permission.RECORD_AUDIO) .onGranted(permissions -> { // 权限允许 startCamera(); }) .onDenied(permissions -> { // 权限拒绝 Toast.makeText(this, "权限被拒绝", Toast.LENGTH_SHORT).show(); }) .start();
3️⃣ RxPermissions(RxJava 结合)
GitHub: https://github.com/tbruyelle/RxPermissions
特点:
使用 RxJava 响应式方式请求权限
链式写法更优雅,适合 RxJava 项目
示例:
RxPermissions rxPermissions = new RxPermissions(this); rxPermissions .request(Manifest.permission.CAMERA, Manifest.permission.RECORD_AUDIO) .subscribe(granted -> { if (granted) { startCamera(); } else { Toast.makeText(this, "权限被拒绝", Toast.LENGTH_SHORT).show(); } });
🔹 总结 库 优点 适合场景 EasyPermissions Google 官方,轻量,回调简单 普通项目、入门推荐 AndPermission API 链式,功能强大 中大型项目,UI 提示丰富 RxPermissions RxJava 响应式 已经用 RxJava 的项目最方便
|