@@ -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