forked from getActivity/XXPermissions
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathXXPermissions.java
136 lines (119 loc) · 4.44 KB
/
XXPermissions.java
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
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
package com.hjq.permissions;
import android.app.Activity;
import android.content.Context;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
/**
* author : HJQ
* github : https://github.com/getActivity/XXPermissions
* time : 2018/06/15
* desc : Android 危险权限请求类
*/
public final class XXPermissions {
private Activity mActivity;
private List<String> mPermissions = new ArrayList<>();
private boolean mConstant;
private XXPermissions(Activity activity) {
mActivity = activity;
}
/**
* 设置请求的对象
*/
public static XXPermissions with(Activity activity) {
return new XXPermissions(activity);
}
/**
* 设置权限组
*/
public XXPermissions permission(String... permissions) {
mPermissions.addAll(Arrays.asList(permissions));
return this;
}
/**
* 设置权限组
*/
public XXPermissions permission(String[]... permissions) {
for (String[] group : permissions) {
mPermissions.addAll(Arrays.asList(group));
}
return this;
}
/**
* 设置权限组
*/
public XXPermissions permission(List<String> permissions) {
mPermissions.addAll(permissions);
return this;
}
/**
* 被拒绝后继续申请,直到授权或者永久拒绝
*/
public XXPermissions constantRequest() {
mConstant = true;
return this;
}
/**
* 请求权限
*/
public void request(OnPermission call) {
//如果没有指定请求的权限,就使用清单注册的权限进行请求
if (mPermissions == null || mPermissions.size() == 0) mPermissions = PermissionUtils.getManifestPermissions(mActivity);
if (mPermissions == null || mPermissions.size() == 0) throw new IllegalArgumentException("The requested permission cannot be empty");
//使用isFinishing方法Activity在熄屏状态下会导致崩溃
//if (mActivity == null || mActivity.isFinishing()) throw new IllegalArgumentException("Illegal Activity was passed in");
if (mActivity == null) throw new IllegalArgumentException("The activity is empty");
if (call == null) throw new IllegalArgumentException("The permission request callback interface must be implemented");
ArrayList<String> failPermissions = PermissionUtils.getFailPermissions(mActivity, mPermissions);
if (failPermissions == null || failPermissions.size() == 0) {
//证明权限已经全部授予过
call.hasPermission(mPermissions, true);
} else {
//检测权限有没有在清单文件中注册
PermissionUtils.checkPermissions(mActivity, mPermissions);
//申请没有授予过的权限
PermissionFragment.newInstant((new ArrayList<>(mPermissions)), mConstant).prepareRequest(mActivity, call);
}
}
/**
* 检查某些权限是否全部授予了
*
* @param context 上下文对象
* @param permissions 需要请求的权限组
*/
public static boolean isHasPermission(Context context, String... permissions) {
ArrayList<String> failPermissions = PermissionUtils.getFailPermissions(context, Arrays.asList(permissions));
return failPermissions == null || failPermissions.size() == 0;
}
/**
* 检查某些权限是否全部授予了
*
* @param context 上下文对象
* @param permissions 需要请求的权限组
*/
public static boolean isHasPermission(Context context, String[]... permissions) {
List<String> permissionList = new ArrayList<>();
for (String[] group : permissions) {
permissionList.addAll(Arrays.asList(group));
}
ArrayList<String> failPermissions = PermissionUtils.getFailPermissions(context, permissionList);
return failPermissions == null || failPermissions.size() == 0;
}
/**
* 跳转到应用权限设置页面
*
* @param context 上下文对象
*/
public static void gotoPermissionSettings(Context context) {
PermissionSettingPage.start(context, false);
}
/**
* 跳转到应用权限设置页面
*
* @param context 上下文对象
* @param newTask 是否使用新的任务栈启动
*/
public static void gotoPermissionSettings(Context context, boolean newTask) {
PermissionSettingPage.start(context, newTask);
}
}