if (checkSelfPermission(Manifest.permission.READ_EXTERNAL_STORAGE)
!= PackageManager.PERMISSION_GRANTED) {
requestPermissions(new String[]{Manifest.permission.READ_EXTERNAL_STORAGE}, 0);
}
if里面的语句那个方法就是请求权限,执行这个方法还会跳出一个对话框,问你要不要开启这个权限。如果你开启了,下一次这个if就不会执行了,因为这个if是判断你这个权限有没有开启。(其实到了这里其实可以结束了,一句话就能申请动态权限了)
但是为了用户体验,我们需要考虑用户拒绝的情况。
第一次会这样问你
当你拒绝一次后,会这样问你(多了一个不再提醒的玩意儿)
所以到了这里我们就可以知道了,如果你点选了拒绝和不再提醒,那么shouldShowRequestPermissionRationale会返回false。而你没有点选不再提醒,shouldShowRequestPermissionRationale就会返回true。这是一个帮我们提升用户体验很好的方法。
总结一下shouldShowRequestPermissionRationale只有当用户同时点选了拒绝开启权限和不再提醒后才会true。
所以你的权限申请更优一点应该这样设计
if (checkSelfPermission(Manifest.permission.READ_EXTERNAL_STORAGE)
!= PackageManager.PERMISSION_GRANTED) {
if (!shouldShowRequestPermissionRationale(Manifest.permission.READ_EXTERNAL_STORAGE)) {
//你自己写提醒用户的逻辑,引导用户手动去设置里开启权限
}
requestPermissions(new String[]{Manifest.permission.READ_EXTERNAL_STORAGE}, 0);
}
因为点选拒绝和不再提示之后,requestPermissions就会被过滤了,所以只能用户手动去开启了。
(这应该是所需要的代码了,网上杂七杂八一大堆我也是有点蒙)
可以参考https://blog.csdn.net/xietansheng/article/details/54315674