Skip to content

Commit 979c0ab

Browse files
author
HJQ
committed
新增字段
1 parent 792ada4 commit 979c0ab

File tree

10 files changed

+58
-26
lines changed

10 files changed

+58
-26
lines changed

DangerousPermissions.png

-44.4 KB
Binary file not shown.

README.md

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -7,19 +7,19 @@
77
#### 集成步骤
88

99
dependencies {
10-
compile 'com.hjq:xxpermissions:1.3'
10+
compile 'com.hjq:xxpermissions:1.5'
1111
}
1212

1313
#### 一句代码搞定权限请求,从未如此简单
1414

15-
> 若不指定请求的权限,会自动获取清单文件中的危险权限进行请求
15+
> 支持多个权限组进行请求,若不指定请求的权限,会自动获取清单文件中的危险权限进行请求
1616
1717
XXPermissions.with(this)
1818
.permission(Permission.Group.STORAGE)
1919
.request(new OnPermission() {
2020

2121
@Override
22-
public void hasPermission(List<String> granted) {
22+
public void hasPermission(List<String> granted, boolean isAll) {
2323
2424
}
2525

app/build.gradle

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -22,5 +22,5 @@ android {
2222
dependencies {
2323
compile fileTree(include: ['*.jar'], dir: 'libs')
2424
compile project(':library')
25-
compile 'com.android.support:appcompat-v7:25.3.1'
25+
compile 'com.android.support:appcompat-v7:25+'
2626
}

app/src/main/AndroidManifest.xml

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,8 @@
55
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
66
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
77

8+
<uses-permission android:name="android.permission.CAMERA" />
9+
810
<application
911
android:icon="@mipmap/ic_launcher"
1012
android:label="@string/app_name"

app/src/main/java/com/hjq/permissions/demo/MainActivity.java

Lines changed: 9 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -21,12 +21,16 @@ protected void onCreate(Bundle savedInstanceState) {
2121

2222
public void requestPermission(View view) {
2323
XXPermissions.with(this)
24-
.permission(Permission.Group.STORAGE)
24+
.permission(Permission.Group.STORAGE, Permission.Group.CAMERA)
2525
.request(new OnPermission() {
2626

2727
@Override
28-
public void hasPermission(List<String> granted) {
29-
Toast.makeText(MainActivity.this, "获取权限成功", Toast.LENGTH_SHORT).show();
28+
public void hasPermission(List<String> granted, boolean isAll) {
29+
if (isAll) {
30+
Toast.makeText(MainActivity.this, "获取权限成功", Toast.LENGTH_SHORT).show();
31+
}else {
32+
Toast.makeText(MainActivity.this, "获取权限成功,部分权限未正常授予", Toast.LENGTH_SHORT).show();
33+
}
3034
}
3135

3236
@Override
@@ -43,10 +47,10 @@ public void noPermission(List<String> denied, boolean quick) {
4347
}
4448

4549
public void isHasPermission(View view) {
46-
if (XXPermissions.isHasPermission(MainActivity.this, Permission.Group.STORAGE)) {
50+
if (XXPermissions.isHasPermission(MainActivity.this, Permission.Group.STORAGE, Permission.Group.CAMERA)) {
4751
Toast.makeText(MainActivity.this, "已经获取到权限,不需要再次申请了", Toast.LENGTH_SHORT).show();
4852
}else {
49-
Toast.makeText(MainActivity.this, "还没有获取到权限", Toast.LENGTH_SHORT).show();
53+
Toast.makeText(MainActivity.this, "还没有获取到权限或者部分权限未授予", Toast.LENGTH_SHORT).show();
5054
}
5155
}
5256

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
1-
#Sun Nov 19 22:55:22 CST 2017
1+
#Wed Jul 04 14:24:07 CST 2018
22
distributionBase=GRADLE_USER_HOME
33
distributionPath=wrapper/dists
44
zipStoreBase=GRADLE_USER_HOME
55
zipStorePath=wrapper/dists
6-
distributionUrl=https\://services.gradle.org/distributions/gradle-3.3-all.zip
6+
distributionUrl=https\://services.gradle.org/distributions/gradle-3.3-all.zip

library/build.gradle

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -10,18 +10,18 @@ android {
1010
defaultConfig {
1111
minSdkVersion 11
1212
targetSdkVersion 23
13-
versionCode 5
14-
versionName "1.3"
13+
versionCode 10
14+
versionName "1.5"
1515
}
1616
}
1717

1818
def siteUrl = 'https://github.com/getActivity/XXPermissions' //项目在github中的地址
1919
def gitUrl = siteUrl + ".git" //项目在github中的地址
2020

21-
//compile 'com.hjq:xxpermissions:1.3'
21+
//compile 'com.hjq:xxpermissions:1.5'
2222
def groupId = 'com.hjq' //定义的maven group id最终引用形式
2323
def artifactId = 'xxpermissions'//maven的artifact id,不要带大写,可以用“-”代替
24-
def versionName = '1.3'//maven 上发布版本号
24+
def versionName = '1.5'//maven 上发布版本号
2525

2626
def repositoryName = 'maven' //自己创建的仓库名,直接在bintray账号下创建的
2727
def repositoryDesc = 'Android 6.0 permissions adaptation framework' //仓库描述,自己定义

library/src/main/java/com/hjq/permissions/OnPermission.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,8 +11,9 @@ public interface OnPermission {
1111
* 有权限被授予时回调
1212
*
1313
* @param granted 请求成功的权限组
14+
* @param isAll 是否全部授予了
1415
*/
15-
void hasPermission(List<String> granted);
16+
void hasPermission(List<String> granted, boolean isAll);
1617

1718
/**
1819
* 有权限被拒绝授予时回调

library/src/main/java/com/hjq/permissions/PermissionUtils.java

Lines changed: 8 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -55,19 +55,22 @@ static boolean isOverMarshmallow() {
5555
* 获取没有授予的权限
5656
*
5757
* @param context 上下文对象
58-
* @param permissions 需要请求的权限组
58+
* @param permissions 需要请求的权限组
5959
*/
6060
static ArrayList<String> getFailPermissions(Context context, String[] permissions) {
6161

62-
//如果是安卓6.0以下版本就返回一个长度为零的数组
62+
//如果是安卓6.0以下版本就返回null
6363
if(!PermissionUtils.isOverMarshmallow()) {
64-
return new ArrayList<>();
64+
return null;
6565
}
6666

67-
ArrayList<String> failPermissions = new ArrayList<>();
67+
ArrayList<String> failPermissions = null;
6868
for (String permission : permissions) {
6969
//把没有授予过的权限加入到集合中
70-
if (context.checkSelfPermission(permission) == PackageManager.PERMISSION_DENIED){
70+
if (context.checkSelfPermission(permission) == PackageManager.PERMISSION_DENIED) {
71+
if (failPermissions == null) {
72+
failPermissions = new ArrayList<>();
73+
}
7174
failPermissions.add(permission);
7275
}
7376
}

library/src/main/java/com/hjq/permissions/XXPermissions.java

Lines changed: 27 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -53,6 +53,14 @@ public XXPermissions permission(String[]... permissions){
5353
return this;
5454
}
5555

56+
/**
57+
* 设置权限组
58+
*/
59+
public XXPermissions permission(List<String> permissions){
60+
this.mPermissions = permissions.toArray(new String[permissions.size() - 1]);
61+
return this;
62+
}
63+
5664
/**
5765
* 请求权限
5866
*/
@@ -75,9 +83,9 @@ public void request(OnPermission call) {
7583

7684
ArrayList<String> failPermissions = PermissionUtils.getFailPermissions(mActivity, mPermissions);
7785

78-
if (failPermissions.isEmpty()) {
86+
if (failPermissions == null) {
7987
//证明权限已经全部授予过
80-
call.hasPermission(Arrays.asList(mPermissions));
88+
call.hasPermission(Arrays.asList(mPermissions), true);
8189
} else {
8290
//将当前的请求码和对象添加到集合中
8391
sContainer.put(requestCode, call);
@@ -97,7 +105,21 @@ public void request(OnPermission call) {
97105
* @param permissions 需要请求的权限组
98106
*/
99107
public static boolean isHasPermission(Context context, String... permissions) {
100-
return PermissionUtils.getFailPermissions(context, permissions).isEmpty();
108+
return PermissionUtils.getFailPermissions(context, permissions) == null;
109+
}
110+
111+
/**
112+
* 检查某些权限是否全部授予了
113+
*
114+
* @param context 上下文对象
115+
* @param permissions 需要请求的权限组
116+
*/
117+
public static boolean isHasPermission(Context context, String[]... permissions) {
118+
List<String> permissionList = new ArrayList<>();
119+
for (String[] group : permissions) {
120+
permissionList.addAll(Arrays.asList(group));
121+
}
122+
return PermissionUtils.getFailPermissions(context, permissionList.toArray(new String[permissionList.size() - 1])) == null;
101123
}
102124

103125
/**
@@ -134,15 +156,15 @@ static void onRequestPermissionsResult(int requestCode, String[] permissions, in
134156
//如果请求成功的权限集合大小和请求的数组一样大时证明权限已经全部授予
135157
if (succeedPermissions.size() == permissions.length) {
136158
//代表申请的所有的权限都授予了
137-
call.hasPermission(succeedPermissions);
159+
call.hasPermission(succeedPermissions, true);
138160
}else {
139161
//获取拒绝权限
140162
List<String> failPermissions = PermissionUtils.getFailPermissions(permissions, grantResults);
141163
//代表申请的权限中有不同意授予的,如果拒绝的时间过快证明是系统自动拒绝
142164
call.noPermission(failPermissions, System.currentTimeMillis() - sRequestTime < 200);
143165
//证明还有一部分权限被成功授予,回调成功接口
144166
if (!succeedPermissions.isEmpty()) {
145-
call.hasPermission(succeedPermissions);
167+
call.hasPermission(succeedPermissions, false);
146168
}
147169
}
148170

0 commit comments

Comments
 (0)