Skip to content

Commit f597c64

Browse files
author
hupei
committed
修复申请的权限不在 AndroidManifest 配置文件中时,
仍然显示 RationalMessage 对话框的问题
1 parent 381c86d commit f597c64

File tree

5 files changed

+76
-43
lines changed

5 files changed

+76
-43
lines changed

README.md

Lines changed: 14 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -10,18 +10,21 @@
1010

1111
#使用Gradle构建时添加一下依赖即可:
1212
```javascript
13-
compile 'com.mylhyl:acp:1.0.1'
13+
compile 'com.mylhyl:acp:1.0.2'
1414
```
1515

1616
# 使用说明
1717
```java
1818
Acp.getInstance(this).request(new AcpOptions.Builder()
19-
.setPermissions(Manifest.permission.WRITE_EXTERNAL_STORAGE, Manifest.permission.READ_PHONE_STATE)
20-
// .setDeniedMessage()
21-
// .setDeniedCloseBtn()
22-
// .setDeniedSettingBtn()
23-
// .setRationalMessage()
24-
// .setRationalBtn()
19+
.setPermissions(Manifest.permission.WRITE_EXTERNAL_STORAGE
20+
, Manifest.permission.READ_PHONE_STATE
21+
, Manifest.permission.SEND_SMS)
22+
/*以下为自定义提示语、按钮文字
23+
.setDeniedMessage()
24+
.setDeniedCloseBtn()
25+
.setDeniedSettingBtn()
26+
.setRationalMessage()
27+
.setRationalBtn()*/
2528
.build(),
2629
new AcpListener() {
2730
@Override
@@ -42,3 +45,7 @@ compile 'com.mylhyl:acp:1.0.1'
4245
### [下载APK体验](/preview/sample-debug.apk)
4346

4447
## QQ交流群:435173211
48+
49+
#### 版本日志
50+
> 1.0.1 修改 minSdkVersion 14
51+
> 1.0.2 修复申请的权限不在`AndroidManifest.xml`配置文件时,中仍然显示`RationalMessage`对话框的问题

acp/build.gradle

Lines changed: 15 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,10 @@
11
apply plugin: 'com.android.library'
22
apply plugin: 'com.github.dcendents.android-maven'
33
apply plugin: 'com.jfrog.bintray'
4+
45
android {
56
compileSdkVersion 23
6-
buildToolsVersion "23.0.2"
7+
buildToolsVersion "23.0.3"
78
defaultConfig {
89
minSdkVersion 14
910
targetSdkVersion 23
@@ -16,41 +17,41 @@ android {
1617
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
1718
}
1819
}
19-
productFlavors {
20+
lintOptions {
21+
abortOnError false
2022
}
2123
}
22-
// Git仓库的主页
24+
2325
def siteUrl = 'https://github.com/mylhyl/AndroidAcp'
24-
// Git仓库的url
2526
def gitUrl = 'https://github.com/mylhyl/AndroidAcp.git'
26-
//唯一包名
27+
2728
group = "com.mylhyl"
28-
//版本号
29-
version = "1.0.1"
29+
version = "1.0.2"
3030

3131
install {
3232
repositories.mavenInstaller {
3333
pom {
3434
project {
3535
packaging 'aar'
3636
artifactId 'acp'
37-
name 'Simplify Android 6.0 complex permissions operation' //添加项目描述
37+
name 'Simplify Android 6.0 complex permissions operation'
3838
url siteUrl
39-
//设置开源证书信息
39+
4040
licenses {
4141
license {
4242
name 'The Apache Software License, Version 2.0'
4343
url 'http://www.apache.org/licenses/LICENSE-2.0.txt'
4444
}
4545
}
46-
//填写开发者基本信息
46+
4747
developers {
4848
developer {
4949
id 'mylhyl'
5050
name 'mylhylAndroid'
5151
5252
}
5353
}
54+
5455
scm {
5556
connection gitUrl
5657
developerConnection gitUrl
@@ -81,25 +82,22 @@ artifacts {
8182
archives javadocJar
8283
archives sourcesJar
8384
}
84-
//配置上传bintray相关信息
85+
8586
Properties properties = new Properties()
8687
properties.load(project.rootProject.file('local.properties').newDataInputStream())
8788
bintray {
88-
//读取bintray帐号和密码。
89-
//一般的为了保密和安全性,在项目的local.properties文件中添加两行句话即可:
9089
user = properties.getProperty("BINTRAY_USER")
9190
key = properties.getProperty("BINTRAY_KEY")
9291
configurations = ['archives']
9392
pkg {
94-
repo = "maven" //上传的中央仓库名称
95-
name = "acp" //上传的项目的名字
93+
repo = "maven"
94+
name = "acp"
9695
websiteUrl = siteUrl
9796
vcsUrl = gitUrl
9897
licenses = ["Apache-2.0"]
9998
publish = true //是否发布
10099
}
101100
}
102101
dependencies {
103-
compile fileTree(dir: 'libs', include: ['*.jar'])
104-
compile 'com.android.support:appcompat-v7:23.1.1'
102+
compile 'com.android.support:appcompat-v7:23.4.0'
105103
}

acp/src/main/java/com/mylhyl/acp/AcpManager.java

Lines changed: 37 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,17 +1,20 @@
11
package com.mylhyl.acp;
22

33
import android.app.Activity;
4+
import android.app.AlertDialog;
45
import android.content.ActivityNotFoundException;
56
import android.content.Context;
67
import android.content.DialogInterface;
78
import android.content.Intent;
9+
import android.content.pm.PackageInfo;
810
import android.content.pm.PackageManager;
911
import android.net.Uri;
1012
import android.provider.Settings;
11-
import android.support.v7.app.AlertDialog;
1213

14+
import java.util.HashSet;
1315
import java.util.LinkedList;
1416
import java.util.List;
17+
import java.util.Set;
1518

1619
/**
1720
* Created by hupei on 2016/4/26.
@@ -25,12 +28,31 @@ class AcpManager {
2528
private AcpOptions mOptions;
2629
private AcpListener mCallback;
2730
private final List<String> mDeniedPermissions = new LinkedList<>();
31+
private final Set<String> mManifestPermissions = new HashSet<>(1);
2832

2933
AcpManager(Context context) {
3034
mContext = context;
3135
mService = new AcpService();
36+
getManifestPermissions();
3237
}
3338

39+
private synchronized void getManifestPermissions() {
40+
PackageInfo packageInfo = null;
41+
try {
42+
packageInfo = mContext.getPackageManager().getPackageInfo(
43+
mContext.getPackageName(), PackageManager.GET_PERMISSIONS);
44+
} catch (PackageManager.NameNotFoundException e) {
45+
e.printStackTrace();
46+
}
47+
if (packageInfo != null) {
48+
String[] permissions = packageInfo.requestedPermissions;
49+
if (permissions != null) {
50+
for (String perm : permissions) {
51+
mManifestPermissions.add(perm);
52+
}
53+
}
54+
}
55+
}
3456

3557
synchronized void request(AcpOptions options, AcpListener acpListener) {
3658
mCallback = acpListener;
@@ -42,11 +64,16 @@ private synchronized void checkSelfPermission() {
4264
mDeniedPermissions.clear();
4365
String[] permissions = mOptions.getPermissions();
4466
for (String permission : permissions) {
45-
int permissionCheck = mService.checkSelfPermission(mContext, permission);
46-
if (permissionCheck == PackageManager.PERMISSION_DENIED) {
47-
mDeniedPermissions.add(permission);
67+
//检查申请的权限是否在 AndroidManifest.xml 中
68+
if (mManifestPermissions.contains(permission)) {
69+
int checkSelfPermission = mService.checkSelfPermission(mContext, permission);
70+
//如果是拒绝状态则装入拒绝集合中
71+
if (checkSelfPermission == PackageManager.PERMISSION_DENIED) {
72+
mDeniedPermissions.add(permission);
73+
}
4874
}
4975
}
76+
//如果没有一个拒绝是响应同意回调
5077
if (mDeniedPermissions.isEmpty()) {
5178
mCallback.onGranted();
5279
onDestroy();
@@ -125,10 +152,16 @@ public void onClick(DialogInterface dialog, int which) {
125152
}).show();
126153
}
127154

155+
/**
156+
* 摧毁本库的 AcpActivity
157+
*/
128158
private void onDestroy() {
129159
if (mActivity != null) mActivity.finish();
130160
}
131161

162+
/**
163+
* 跳转到设置界面
164+
*/
132165
private void startSetting() {
133166
try {
134167
Intent intent = new Intent(Settings.ACTION_APPLICATION_DETAILS_SETTINGS)

build.gradle

Lines changed: 1 addition & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,10 @@
1-
// Top-level build file where you can add configuration options common to all sub-projects/modules.
2-
31
buildscript {
42
repositories {
53
jcenter()
64
}
75
dependencies {
8-
classpath 'com.android.tools.build:gradle:2.0.0'
9-
//自动上传至 bintray 平台插件
6+
classpath 'com.android.tools.build:gradle:2.1.2'
107
classpath 'com.jfrog.bintray.gradle:gradle-bintray-plugin:1.2'
11-
//自动化 maven 打包插件
128
classpath 'com.github.dcendents:android-maven-gradle-plugin:1.3'
139
}
1410
}
@@ -18,7 +14,3 @@ allprojects {
1814
jcenter()
1915
}
2016
}
21-
22-
task clean(type: Delete) {
23-
delete rootProject.buildDir
24-
}

sample/src/main/java/com/mylhyl/acp/sample/MainActivity.java

Lines changed: 9 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -33,12 +33,15 @@ public void onClickFragment(View v) {
3333

3434
public void onClickAll(View v) {
3535
Acp.getInstance(this).request(new AcpOptions.Builder()
36-
.setPermissions(Manifest.permission.WRITE_EXTERNAL_STORAGE, Manifest.permission.READ_PHONE_STATE)
37-
// .setDeniedMessage()
38-
// .setDeniedCloseBtn()
39-
// .setDeniedSettingBtn()
40-
// .setRationalMessage()
41-
// .setRationalBtn()
36+
.setPermissions(Manifest.permission.WRITE_EXTERNAL_STORAGE
37+
, Manifest.permission.READ_PHONE_STATE
38+
, Manifest.permission.SEND_SMS)
39+
/*以下为自定义提示语、按钮文字
40+
.setDeniedMessage()
41+
.setDeniedCloseBtn()
42+
.setDeniedSettingBtn()
43+
.setRationalMessage()
44+
.setRationalBtn()*/
4245
.build(),
4346
new AcpListener() {
4447
@Override

0 commit comments

Comments
 (0)