0%

安卓权限申请使用

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 的项目最方便