Android备忘(二) 动态权限

2020-05-07  本文已影响0人  陶籍

说明

    //判断授权(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;
    }
}
上一篇下一篇

猜你喜欢

热点阅读