美文网首页
Android备忘(二) 动态权限

Android备忘(二) 动态权限

作者: 陶籍 | 来源:发表于2020-05-07 12:58 被阅读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;
        }
    }

    相关文章

      网友评论

          本文标题:Android备忘(二) 动态权限

          本文链接:https://www.haomeiwen.com/subject/yeioghtx.html