Skip to content

Commit 39ba14e

Browse files
committed
Avoid crash when requesting Undefined permission.
1 parent 2ec1bae commit 39ba14e

3 files changed

Lines changed: 40 additions & 29 deletions

File tree

app/build.gradle

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -33,6 +33,6 @@ dependencies {
3333
kapt 'com.github.bumptech.glide:compiler:4.5.0'
3434

3535
implementation project(':utils')
36-
// implementation 'com.github.yjfnypeu:EasyAndroid:e2b854f62c'
36+
// implementation 'com.github.yjfnypeu:EasyAndroid:1.2.5'
3737
}
3838

app/src/main/java/com/haoge/sample/easyandroid/activities/EasyPermissionsActivity.kt

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -36,7 +36,8 @@ class EasyPermissionsActivity:BaseActivity() {
3636

3737
@OnClick(R.id.permissionSingle)
3838
fun permissionSingle() {
39-
EasyPermissions.create(Manifest.permission.WRITE_EXTERNAL_STORAGE)
39+
// EasyPermissions.create(Manifest.permission.WRITE_EXTERNAL_STORAGE)
40+
EasyPermissions.create("android.permission.READ_PRIVILEGED_PHONE_STATE")
4041
.alwaysDenyNotifier(denyNotifier)
4142
.callback(callback)
4243
.request(this)

utils/src/main/java/com/haoge/easyandroid/easy/EasyPermissions.kt

Lines changed: 37 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -87,35 +87,41 @@ class EasyPermissions private constructor(private val permissions:Array<out Stri
8787

8888
@TargetApi(Build.VERSION_CODES.M)
8989
private fun requestInternal(permissions: Array<out String>, activity: Activity) {
90-
if (activity.isFinishing || activity.isDestroyed) {
91-
callback?.invoke(false)
92-
return
93-
}
90+
try {
91+
if (activity.isFinishing || activity.isDestroyed) {
92+
callback?.invoke(false)
93+
return
94+
}
9495

95-
val fragment = PermissionFragment.findOrCreate(activity)
96+
val fragment = PermissionFragment.findOrCreate(activity)
9697

97-
val denies = mutableListOf<String>()
98-
for (permission in permissions) {
99-
if (isPermissionGranted(permission, activity)) {
100-
continue
98+
val denies = mutableListOf<String>()
99+
for (permission in permissions) {
100+
if (isPermissionGranted(permission, activity)) {
101+
continue
102+
}
103+
// 过滤重复权限
104+
denies.remove(permission)
105+
denies.add(permission)
101106
}
102-
// 过滤重复权限
103-
denies.remove(permission)
104-
denies.add(permission)
105-
}
106107

107-
if (denies.isEmpty()) {
108-
callback?.invoke(true)
109-
return
108+
if (denies.isEmpty()) {
109+
callback?.invoke(true)
110+
return
111+
}
112+
113+
RationalChain(denies.iterator(), fragment, rational) { accept:Boolean ->
114+
if (accept) {
115+
fragment.requestPermissions(denies, callback, denied, this)
116+
} else {
117+
callback?.invoke(false)
118+
}
119+
}.process()
120+
} catch (e:Exception) {
121+
e.printStackTrace()
122+
callback?.invoke(false)
110123
}
111124

112-
RationalChain(denies.iterator(), fragment, rational) { accept:Boolean ->
113-
if (accept) {
114-
fragment.requestPermissions(denies, callback, denied, this)
115-
} else {
116-
callback?.invoke(false)
117-
}
118-
}.process()
119125
}
120126

121127
companion object {
@@ -138,11 +144,15 @@ class EasyPermissions private constructor(private val permissions:Array<out Stri
138144
val names = mutableListOf<String>()// 进行过滤去重处理的临时变量
139145
val groups = mutableListOf<PermissionGroupInfo>()
140146
for (permission in permissions) {
141-
val info = context.packageManager.getPermissionInfo(permission, PackageManager.GET_META_DATA)
142-
if (names.contains(info.group)) continue
143-
names.add(info.group)
147+
val group = context.packageManager.getPermissionInfo(permission, PackageManager.GET_META_DATA)?.group
148+
if (group == null) {
149+
groups.add(PermissionGroupInfo("Unknown", permission))
150+
continue
151+
}
152+
if (names.contains(group)) continue
153+
names.add(group)
144154

145-
val groupInfo = context.packageManager.getPermissionGroupInfo(info.group, PackageManager.GET_META_DATA)
155+
val groupInfo = context.packageManager.getPermissionGroupInfo(group, PackageManager.GET_META_DATA)
146156
groups.add(PermissionGroupInfo(
147157
context.resources.getString(groupInfo.labelRes),
148158
context.resources.getString(groupInfo.descriptionRes)

0 commit comments

Comments
 (0)