|
1 | 1 | 
|
2 | 2 |
|
3 |
| -[](https://android-arsenal.com/api?level=14)  |
| 3 | +[](https://android-arsenal.com/api?level=14)  |
4 | 4 | [](https://android-arsenal.com/api?level=14) 
|
5 | 5 | [](https://github.com/nasduck/AfikiPermissions/blob/master/LICENSE)
|
6 | 6 |
|
7 |
| -AfikiPermissions是为了简化Android危险权限动态申请操作,将权限申请判断和权限申请过程简化,将权限申请结果拆分成授予成功和授予失败两部分处理,使结果处理更富有逻辑性。 |
| 7 | +RafikiPermissions 是为了简化 Android 危险权限动态申请操作,将权限申请判断和权限申请过程简化,将权限申请结果拆分成授予成功和授予失败两部分处理,使结果处理更富有逻辑性。组件名称 Rafiki 拉菲奇来源于狮子王里的狒狒长老,统管权限 :D |
| 8 | + |
| 9 | +* [Google developer - Dangerous Permissions(英文需翻墙)](https://developer.android.com/guide/topics/permissions/overview#permission-groups) |
| 10 | +* [官方危险权限列表-中文](https://developer.android.google.cn/guide/topics/permissions/overview#permission-groups) |
8 | 11 |
|
9 | 12 | ## 依赖
|
10 |
| -步骤一:在项目的build.gradle中添加jitpack |
11 |
| -``` |
| 13 | +步骤一:在项目的 `build.gradle` 中添加 `jitpack` |
| 14 | + |
| 15 | +```gradle |
12 | 16 | allprojects {
|
13 | 17 | repositories {
|
14 | 18 | ...
|
15 | 19 | maven { url 'https://www.jitpack.io' }
|
16 | 20 | }
|
17 | 21 | }
|
18 | 22 | ```
|
| 23 | + |
19 | 24 | 步骤二:添加依赖项
|
20 |
| -``` |
| 25 | + |
| 26 | +```gradle |
21 | 27 | dependencies {
|
22 |
| - implementation 'com.github.nasduck:RafikiPermissions:1.1.2' |
| 28 | + implementation 'com.github.nasduck:RafikiPermissions:1.2.0' |
23 | 29 | }
|
24 | 30 | ```
|
25 | 31 |
|
26 |
| -## 使用方式 |
| 32 | +## 基本使用 |
| 33 | + |
27 | 34 | #### [详细使用参考文档](https://github.com/nasduck/RafikiPermissions/wiki/%E8%AF%A6%E7%BB%86%E4%BD%BF%E7%94%A8%E5%8F%82%E8%80%83%E6%96%87%E6%A1%A3)
|
28 |
| -### 基本权限申请 |
29 |
| -一个简单的例子,假设我们需要实现拍照的功能,这时候要动态获取相机的权限**Manifest.permission.CAMERA** |
30 |
| -#### 1、添加权限到AndroidManifest.xml |
31 |
| -在AndroidManifest.xml中加入相应的权限代码: |
32 |
| -``` |
| 35 | + |
| 36 | +假设我们需要动态获取相机的权限 `Manifest.permission.CAMERA` |
| 37 | + |
| 38 | +#### 1、添加权限 |
| 39 | + |
| 40 | +在 `AndroidManifest.xml` 中加入相应的权限: |
| 41 | + |
| 42 | +```xml |
33 | 43 | <uses-permission android:name="android.permission.CAMERA" />
|
34 | 44 | ```
|
35 | 45 |
|
36 |
| -#### 2、在BaseActivity中进行返回结果的初始化 |
37 |
| -``` |
| 46 | +#### 2、在基类 Activity 中统一进行返回结果的处理 |
| 47 | + |
| 48 | +```java |
38 | 49 | public class BaseActivity extends AppCompatActivity {
|
39 | 50 | @Override
|
40 | 51 | public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
|
41 | 52 | super.onRequestPermissionsResult(requestCode, permissions, grantResults);
|
| 53 | + |
42 | 54 | // 在onRequestPermissionsResult中加入这行代码,传入对应的值
|
43 | 55 | RafikiPermissions.getInstance(this).onResult(requestCode, permissions, grantResults);
|
44 | 56 | }
|
45 | 57 | }
|
46 | 58 | ```
|
47 | 59 |
|
48 |
| -#### 3、在继承了BaseActivity的Activity中使用 |
49 |
| -``` |
| 60 | +#### 3、在继承了基类的 Activity 中请求权限 |
| 61 | + |
| 62 | +```java |
50 | 63 | // 对于权限是否授予进行判断,已授予返回true,未授予进行权限授予操作
|
51 | 64 | if (RafikiPermissions.getInstance(this)
|
52 |
| - .setResultStrategy(new PermissionResultCustomStrategy(this)) // 设置自定义的权限授予结果处理策略 |
53 |
| - .requestCamera()) { // 请求相机权限 |
54 |
| - // 如果已经授予权限后,需要作的操作逻辑 |
| 65 | + .setResultStrategy(new PermissionResultCustomStrategy(this)) // 设置自定义的权限授予结果处理策略, 也有其他2种预定义策略 |
| 66 | + .requestCamera()) { |
| 67 | + // 已经授予权限的逻辑操作 |
| 68 | + ... |
55 | 69 | }
|
56 | 70 | ```
|
57 | 71 |
|
58 |
| -#### 4、在回调中进行权限授予后的逻辑处理 |
59 |
| -``` |
| 72 | +#### 4、实现授权结果的回调 |
| 73 | + |
| 74 | +实现接口 `OnPermissionResultListener`: |
| 75 | + |
| 76 | +```java |
60 | 77 | @Override
|
61 | 78 | public void onPermissionsResultGrant(int requestCode) {
|
62 | 79 | switch (requestCode) {
|
63 |
| - // 根据权限对应的requestCode进行权限操作的匹配,授予失败同理 |
64 | 80 | case RafikiResultCode.RESULT_CODE_CAMERA:
|
65 |
| - // 权限授予成功后的操作 |
| 81 | + // 权限授予成功 |
66 | 82 | }
|
67 | 83 | }
|
68 | 84 |
|
69 | 85 | @Override
|
70 | 86 | public void onPermissionsResultDenied(int requestCode) {
|
71 | 87 | switch (requestCode) {
|
72 | 88 | case RafikiResultCode.RESULT_CODE_CAMERA:
|
73 |
| - // 权限授予失败后的操作 |
| 89 | + // 权限授予失败后 |
74 | 90 | }
|
75 | 91 | }
|
76 | 92 | ```
|
77 | 93 |
|
78 |
| -### 权限申请策略 |
79 |
| -之前的例子中已经使用了PermissionResultCustomStrategy,是留给用户自己去实现的权限授予操作后的逻辑,在本库中已经封装了几种策略。 |
80 |
| -- PermissionResultNothingStrategy——授予权限后不做任何操作 |
81 |
| -- PermissionResultGuideStrategy——授予权限失败后引导用户去设置中作权限授予 |
| 94 | +## 权限处理策略 |
| 95 | + |
| 96 | +提供三种权限处理策略 |
| 97 | + |
| 98 | +1. **PermissionResultNothingStrategy** 默认策略. 无论是否授予策略, 不做任何操作 |
| 99 | +2. **PermissionResultGuideStrategy** 用户拒绝授予权限后, 弹出弹窗引导用户去应用设置中作权限授予 |
| 100 | +3. **PermissionResultCustomStrategy** 自定义权限授予策略. 实现 `OnPermissionResultListener` 接口自定义授权回调处理逻辑 |
| 101 | + |
| 102 | +## 请求权限不同的方式 |
| 103 | + |
| 104 | +##### 请求单个权限 |
| 105 | + |
| 106 | +封装了各个权限对应的 .requestXX() 方法. 比如上面例子中, 请求照相权限, 直接调用 `requestCamera()` |
| 107 | + |
| 108 | +##### 请求多个权限 |
82 | 109 |
|
83 |
| -## 联系我们 |
| 110 | +动态请求多个权限时,根据需要添加相应的权限,最后使用 `request()` 方法请求权限,参数传入自定义的 requestCode(不传则默认为`RafikiResultCode.RAFIKI_PERMISSION_RESULT_CODE`), 用以在回调中识别这次请求: |
84 | 111 |
|
| 112 | +```java |
| 113 | +if (RafikiPermissions.getInstance(this) |
| 114 | + .addReadExternalStorage() |
| 115 | + .addWriteExternalStorage() |
| 116 | + .setResultStrategy(new PermissionResultCustomStrategy(this)) // 设置自定义的权限授予结果处理策略 |
| 117 | + .request(RESULT_CODE)) { |
| 118 | + // 已经授予权限的逻辑操作 |
| 119 | +} |
| 120 | +``` |
| 121 | + |
| 122 | +或者使用 `addPermissions()` 设置一组权限 |
| 123 | + |
| 124 | +```java |
| 125 | +List<String> permissions = new ArrayList(); |
| 126 | +permissions.add(Manifest.permission.READ_EXTERNAL_STORAGE); |
| 127 | +permissions.add(Manifest.permission.WRITE_EXTERNAL_STORAGE); |
| 128 | + |
| 129 | +if (RafikiPermissions.getInstance(this) |
| 130 | + .addPermissions(permissions) |
| 131 | + .setResultStrategy(new PermissionResultCustomStrategy(this)) |
| 132 | + .request(RESULT_CODE)) { |
| 133 | + // 已经授予权限的逻辑操作 |
| 134 | +} |
| 135 | +``` |
85 | 136 |
|
86 | 137 | ## LICENSE
|
87 | 138 | > Copyright
|
|
0 commit comments