private List<String> findDeniedPermissions(String[] permissions) { try { List<String> needRequestPermissonList = new ArrayList<String>(); if (Build.VERSION.SDK_INT >= 23 && getApplicationInfo().targetSdkVersion >= 23) { for (String perm : permissions) { if (checkMySelfPermission(perm) != PackageManager.PERMISSION_GRANTED || shouldShowMyRequestPermissionRationale(perm)) { if (!needCheckBackLocation && BACK_LOCATION_PERMISSION.equals(perm)) // { continue; } needRequestPermissonList.add(perm); } } } return needRequestPermissonList; } catch (Throwable e) { e.printStackTrace(); } return null; }解释代码
时间: 2024-02-11 12:22:57 浏览: 78
这段代码是一个方法`findDeniedPermissions`,它接受一个字符串数组参数`permissions`。该方法的作用是查找被拒绝的权限并返回一个包含这些权限的列表。
首先,创建一个空的字符串列表`needRequestPermissonList`,用于存储需要请求的权限。
然后,通过条件判断,检查当前系统版本是否大于等于 23 并且应用的目标 SDK 版本是否大于等于 23。这个条件判断主要是为了适配 Android 6.0(API level 23)及以上版本的运行时权限机制。
接下来,使用`for`循环遍历传入的权限数组`permissions`。
在循环中,首先通过调用`checkMySelfPermission(perm)`方法检查当前应用是否具有该权限。如果没有该权限或者用户已经拒绝了该权限请求,再通过调用`shouldShowMyRequestPermissionRationale(perm)`方法判断是否需要向用户解释为什么需要该权限。
如果以上条件成立,则继续判断是否需要排除某些特定的权限,比如`BACK_LOCATION_PERMISSION`。如果不需要排除或者不是要排除的权限,则将该权限添加到`needRequestPermissonList`中。
最后,返回包含被拒绝的权限的列表`needRequestPermissonList`。
如果在执行过程中出现异常,则会打印异常信息并返回`null`。
阅读全文