用到开源的一个权限管理库
https://github.com/yanzhenjie/AndPermission
1,系统6.0以上的手机,调用相机时,onGranted与onDenied都调用了
原因分析:相机调用时,拍的照片所放位置
Intent intent;
// 判断是否挂载了SD卡
String savePath = "";
String storageState = Environment.getExternalStorageState();
if (storageState.equals(Environment.MEDIA_MOUNTED)) {
savePath = Environment.getExternalStorageDirectory() + "/";
File savedir = new File(savePath);
if (!savedir.exists()) {
savedir.mkdirs();
}
}
// 没有挂载SD卡,无法保存文件
if (CommonUtils.isNull(savePath)) {
ToastTool.showToast("无法保存照片,请检查SD卡是否挂载");
return;
}
再次触发进入sd卡权限申请,所以又回调了onDenied方法
// 6.0之上申请牌照和写入存储权限
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
AndPermission.with(Select_or_Picture_Activity.this).permission(Manifest.permission.CAMERA,Manifest.permission.WRITE_EXTERNAL_STORAGE)
.rationale(new DefaultRationale() )
.onGranted(new Action() {
@Override
public void onAction(List<String> permissions) {
System.out.println("---------有权限了");
Toast.makeText(Select_or_Picture_Activity.this,R.string.successfully,Toast.LENGTH_SHORT).show();
}
})
.onDenied(new Action() {
@Override
public void onAction(List<String> permissions) {
System.out.println("---------没有权限");
Toast.makeText(Select_or_Picture_Activity.this,R.string.failure,Toast.LENGTH_SHORT).show();
if (AndPermission.hasAlwaysDeniedPermission(Select_or_Picture_Activity.this, permissions)) {
mSetting.showSetting(permissions);
}
}
}).start();
}else {
// new getPic().execute(); // 获取图片
2,允许权限后,进入设置改为拒绝,又调用onGranted,但其实并没有授权
待续
网友评论