android动态权限
日期: 2019-04-16 分类: 个人收藏 410次阅读
@android动态权限
Android版本23以上添加了动态权限,也就是Android M(23)
如何使用动态权限
Activity和fragment都有权限申请的方法
activity.requestPermissions(new String[]{Manifest.permission.WRITE_EXTERNAL_STORAGE},
reqCode)
fragment.requestPermissions(new String[]{Manifest.permission.WRITE_EXTERNAL_STORAGE},
reqCode);
这里要强调,如果想要在fragment的onRequestPermissionsResult收到请求结果,那么必须使用fragment本身去申请权限。
下面是权限回调方法
@Override
public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
super.onRequestPermissionsResult(requestCode, permissions, grantResults);
if (requestCode == reqCode) {
if (grantResults.length > 0) {
if (grantResults[0] == PackageManager.PERMISSION_GRANTED) {
//权限允许
}else{
//权限拒绝
}
}
}
}
如果用户拒绝了,并且勾选了不在提醒该如何做
if(activity.shouldShowRequestPermissionRationale(Manifest.permission.WRITE_EXTERNAL_STORAGE)) {
//如果点选了拒绝和不再提醒,那么shouldShowRequestPermissionRationale会返回false
//如果不再提醒,可以在这里弹框让用户去设置里面开启,或者直接跳转到设置页面
Intent intent = new Intent(Settings.ACTION_APPLICATION_DETAILS_SETTINGS);
Uri uri = Uri.fromParts("package", activity.getPackageName(), null);
intent.setData(uri);
activity.startActivity(intent);
}
这时候还有一个问题,虽然用户拒绝了,也勾选了不在提醒,但是用户手动到设置中点击了允许,这时候
activity.shouldShowRequestPermissionRationale(Manifest.permission.WRITE_EXTERNAL_STORAGE)
依然返回false,这时候其实已经允许了权限,没必要在提醒用户
所以要不要提醒用户,还得加一个判断
int hasWritePermission = activity.checkSelfPermission(Manifest.permission.WRITE_EXTERNAL_STORAGE);
if (!activity.shouldShowRequestPermissionRationale(Manifest.permission.WRITE_EXTERNAL_STORAGE) && hasWritePermission != PackageManager.PERMISSION_GRANTED) {//如果拒绝并且不在提醒,并且权限不允许允许
showMessageProxy.displayToast("新包放不下了,请小主到设置中开启存储权限");
Intent intent = new Intent(Settings.ACTION_APPLICATION_DETAILS_SETTINGS);
Uri uri = Uri.fromParts("package", activity.getPackageName(), null);
intent.setData(uri);
activity.startActivity(intent);
return;
}
除特别声明,本站所有文章均为原创,如需转载请以超级链接形式注明出处:SmartCat's Blog
标签:Android
上一篇: 数据挖掘
下一篇: django-实现登录短信验证
精华推荐