Skip to content

Commit 65109db

Browse files
author
HJQ
committed
修复权限被拒绝后自动申请时的逻辑
1 parent 74418e9 commit 65109db

File tree

6 files changed

+54
-21
lines changed

6 files changed

+54
-21
lines changed

README.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@
99
#### 集成步骤
1010

1111
dependencies {
12-
implementation 'com.hjq:xxpermissions:3.8'
12+
implementation 'com.hjq:xxpermissions:5.0'
1313
}
1414

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

app/build.gradle

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -7,8 +7,8 @@ android {
77
applicationId "com.hjq.permissions.demo"
88
minSdkVersion 14
99
targetSdkVersion 26
10-
versionCode 38
11-
versionName "3.8"
10+
versionCode 50
11+
versionName "5.0"
1212
testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
1313
}
1414
buildTypes {

library/build.gradle

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -8,16 +8,16 @@ android {
88
defaultConfig {
99
minSdkVersion 11
1010
targetSdkVersion 26
11-
versionCode 38
12-
versionName "3.8"
11+
versionCode 50
12+
versionName "5.0"
1313
}
1414
}
1515

1616
publish {
1717
userOrg = 'getactivity'//填写bintray用户名,注意大小写
1818
groupId = 'com.hjq'//定义的maven group id最终引用形式
1919
artifactId = 'xxpermissions'//maven的artifact id
20-
version = '3.8'//maven 上发布版本号
20+
version = '5.0'//maven 上发布版本号
2121
description = 'Android 6.0 permissions adaptation framework'//描述,自己定义
2222
website = "https://github.com/getActivity/XXPermissions"//项目在github中的地址
2323
}

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,7 @@ public interface OnPermission {
2222
* 有权限被拒绝授予时回调
2323
*
2424
* @param denied 请求失败的权限组
25-
* @param quick 是否被系统自动拒绝了
25+
* @param quick 是否有某个权限被永久拒绝了
2626
*/
2727
void noPermission(List<String> denied, boolean quick);
2828
}

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

Lines changed: 7 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -131,14 +131,17 @@ public void onRequestPermissionsResult(int requestCode, String[] permissions, in
131131
//获取拒绝权限
132132
List<String> failPermissions = PermissionUtils.getFailPermissions(permissions, grantResults);
133133

134-
if (getArguments().getBoolean(REQUEST_CONSTANT) && PermissionUtils.checkPermissionPermanentDenied(getActivity(), failPermissions)) {
135-
//继续请求权限直到用户授权或者永久拒绝
134+
//检查是否开启了继续申请模式,如果是则检查没有授予的权限是否还能继续申请
135+
if (getArguments().getBoolean(REQUEST_CONSTANT)
136+
&& PermissionUtils.isRequestDeniedPermission(getActivity(), failPermissions)) {
137+
138+
//如果有的话就继续申请权限,直到用户授权或者永久拒绝
136139
requestPermission();
137140
return;
138141
}
139142

140-
//代表申请的权限中有不同意授予的,如果拒绝的时间过快证明是系统自动拒绝
141-
call.noPermission(failPermissions, PermissionUtils.checkPermissionPermanentDenied(getActivity(), failPermissions));
143+
//代表申请的权限中有不同意授予的,如果有某个权限被永久拒绝就返回true给开发人员,让开发者引导用户去设置界面开启权限
144+
call.noPermission(failPermissions, PermissionUtils.checkMorePermissionPermanentDenied(getActivity(), failPermissions));
142145

143146
//证明还有一部分权限被成功授予,回调成功接口
144147
if (!succeedPermissions.isEmpty()) {

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

Lines changed: 40 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -130,25 +130,55 @@ static ArrayList<String> getFailPermissions(Context context, List<String> permis
130130
}
131131

132132
/**
133-
* 检查某个权限是否被永久拒绝
133+
* 是否还能继续申请没有授予的权限
134+
*
135+
* @param activity Activity对象
136+
* @param failPermissions 失败的权限
137+
*/
138+
static boolean isRequestDeniedPermission(Activity activity, List<String> failPermissions) {
139+
for (String permission : failPermissions) {
140+
//检查是否还有权限还能继续申请的(这里指没有被授予的权限但是也没有被永久拒绝的)
141+
if (!checkSinglePermissionPermanentDenied(activity, permission)) {
142+
return true;
143+
}
144+
}
145+
return false;
146+
}
147+
148+
/**
149+
* 在权限组检查某个权限是否被永久拒绝
134150
*
135151
* @param activity Activity对象
136152
* @param permissions 请求的权限
137153
*/
138-
static boolean checkPermissionPermanentDenied(Activity activity, List<String> permissions) {
154+
static boolean checkMorePermissionPermanentDenied(Activity activity, List<String> permissions) {
139155

140156
for (String permission : permissions) {
141157

142-
//安装权限和浮窗权限不算在内
143-
if (permission.equals(Permission.REQUEST_INSTALL_PACKAGES) || permission.equals(Permission.SYSTEM_ALERT_WINDOW)) {
144-
continue;
158+
if (checkSinglePermissionPermanentDenied(activity, permission)) {
159+
return true;
145160
}
161+
}
162+
return false;
163+
}
164+
165+
/**
166+
* 检查某个权限是否被永久拒绝
167+
*
168+
* @param activity Activity对象
169+
* @param permission 请求的权限
170+
*/
171+
static boolean checkSinglePermissionPermanentDenied(Activity activity, String permission) {
172+
173+
//安装权限和浮窗权限不算,本身申请方式和危险权限申请方式不同,因为没有永久拒绝的选项,所以这里返回false
174+
if (permission.equals(Permission.REQUEST_INSTALL_PACKAGES) || permission.equals(Permission.SYSTEM_ALERT_WINDOW)) {
175+
return false;
176+
}
146177

147-
if (PermissionUtils.isOverMarshmallow()) {
148-
if (activity.checkSelfPermission(permission) == PackageManager.PERMISSION_DENIED) {
149-
if (!activity.shouldShowRequestPermissionRationale(permission)) {
150-
return true;
151-
}
178+
if (PermissionUtils.isOverMarshmallow()) {
179+
if (activity.checkSelfPermission(permission) == PackageManager.PERMISSION_DENIED) {
180+
if (!activity.shouldShowRequestPermissionRationale(permission)) {
181+
return true;
152182
}
153183
}
154184
}

0 commit comments

Comments
 (0)