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 10:22:57 浏览: 26
这段代码是一个方法`findDeniedPermissions`,它接受一个字符串数组参数`permissions`。该方法的作用是查找被拒绝的权限并返回一个包含这些权限的列表。
首先,创建一个空的字符串列表`needRequestPermissonList`,用于存储需要请求的权限。
然后,通过条件判断,检查当前系统版本是否大于等于 23 并且应用的目标 SDK 版本是否大于等于 23。这个条件判断主要是为了适配 Android 6.0(API level 23)及以上版本的运行时权限机制。
接下来,使用`for`循环遍历传入的权限数组`permissions`。
在循环中,首先通过调用`checkMySelfPermission(perm)`方法检查当前应用是否具有该权限。如果没有该权限或者用户已经拒绝了该权限请求,再通过调用`shouldShowMyRequestPermissionRationale(perm)`方法判断是否需要向用户解释为什么需要该权限。
如果以上条件成立,则继续判断是否需要排除某些特定的权限,比如`BACK_LOCATION_PERMISSION`。如果不需要排除或者不是要排除的权限,则将该权限添加到`needRequestPermissonList`中。
最后,返回包含被拒绝的权限的列表`needRequestPermissonList`。
如果在执行过程中出现异常,则会打印异常信息并返回`null`。
相关问题
在<string name="no_permissions_allowed" msgid="6081976856354669209">"未允许任何权限"</string>中可以修改字体显示大小吗
可以,你可以在应用程序的资源文件中的<string>标记的文本中使用HTML标记来设置字体大小。例如,你可以使用<span>标记来设置字体大小,如下所示:
```
<string name="no_permissions_allowed" msgid="6081976856354669209">未允许任何权限,请<span style="font-size:20px;">在设置中授权</span></string>
```
这将在显示"未允许任何权限,请在设置中授权"时将"在设置中授权"文本设置为20像素的字体大小。
Page<TbBottomArticle> page = new Page<>(current,pageSize); QueryWrapper<TbBottomArticle> wrapper = new QueryWrapper<>(); if (StringUtils.hasText(tbBottomArticle.getName())){ wrapper.like("name",tbBottomArticle.getName()); } if(tbBottomArticle.getIsDisable()!=null){ wrapper.eq("is_disable",tbBottomArticle.getIsDisable()); } List<TbBottomArticle> permissions = articalDao.selectList(wrapper); //保存一级菜单 ArrayList<TbBottomArticle> permissionsOne = new ArrayList<>(); for (TbBottomArticle permission:permissions){ if (permission.getParentId().equals("0")){ permissionsOne.add(permission); } } for (TbBottomArticle permission:permissionsOne){ permission.setChildren(findChildren(permission.getParentId(),permissions)); } page.setRecords(permissionsOne); page.setTotal(permissionsOne.size());
这段代码的作用是查询数据库中的 TbBottomArticle 数据,并将其封装到一个分页对象(Page)中。
首先,它创建了一个分页对象,并使用传入的参数 current 和 pageSize 初始化它。然后,它创建了一个条件查询对象(QueryWrapper<TbBottomArticle> wrapper),并根据传入的条件(tbBottomArticle.getName() 和 tbBottomArticle.getIsDisable())设置查询条件。如果这些条件存在,它将使用 wrapper.like() 和 wrapper.eq() 方法设置相应的查询条件。
接下来,它执行查询操作,并将查询结果保存到一个列表中(List<TbBottomArticle> permissions)。
然后,它遍历列表中的每个 TbBottomArticle 对象,并将它们按照其 parentId 属性分组。它将 parentId 属性为 "0" 的 TbBottomArticle 对象保存到一个 ArrayList<TbBottomArticle> 对象中,并将其设置为一级菜单。然后,它调用一个递归方法 findChildren() 来查找每个一级菜单下的子菜单,并将它们设置为该一级菜单的 children 属性。
最后,它将封装好的一级菜单列表设置为分页对象的 records 属性,并将列表的长度设置为分页对象的 total 属性。
总体来说,这段代码的作用就是查询数据库中的数据,并将其封装到一个分页对象中,以便在前端页面进行分页展示。