说明
//判断授权(true:已授权、 false:未授权)
ContextCompat.checkSelfPermission(context, CAMERA_PERMISSION) != PackageManager.PERMISSION_GRANTED;
//判断状况(true:取消、 false: 已授权、未请求、勾选拒绝)
ActivityCompat.shouldShowRequestPermissionRationale(context,permission);
判断
public void checkPermission (Activity context, String permission){
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M){
if (ContextCompat.checkSelfPermission(context, permission) != PackageManager.PERMISSION_GRANTED){
if (ActivityCompat.shouldShowRequestPermissionRationale(context,permission)){
//TODO 授权被取消过:系统授权窗口出现勾选拒绝选项,此处可以自定义Dialog进行权限描述
}
}
// 权限请求前状态:已授权、已拒绝、取消过、首次请求
// 1. 首次授权通过与已授权:回调参数相同
// 2. 首次勾选拒绝与已拒绝:回调参数相同
// 3. 取消过:自定义权限描述后再次请求权限
//所以在任何状态下一律请求:通过回调处理:授权、勾选拒绝
ActivityCompat.requestPermissions(context, new String[]{permission}, REQUEST_CODE);
}
}
处理
@Override
public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
super.onRequestPermissionsResult(requestCode, permissions, grantResults);
switch (requestCode){
case REQUEST_CODE:
if (grantResults.length > 0 && grantResults[0] == PackageManager.PERMISSION_GRANTED) {
//TODO 已授权:集中处理授权后功能...
}else{
if (!ActivityCompat.shouldShowRequestPermissionRationale(PermissionHelperActivity.this, CAMERA_PERMISSION)){
//TODO 授权被勾选拒绝:不再显示系统授权窗口,此处可以自定义Dialog引导手动开启权限
}
}
break;
default:break;
}
}
网友评论