Android权限(多个权限申请)

   日期:2020-09-04     浏览:136    评论:0    
核心提示:多个权限:private String[] permissions = {Manifest.permission.CAMERA, Manifest.permission.READ_EXTERNAL_STORAGE}; private List permissionList = new ArrayList<>(); private void getPermission() { i

多个权限:

private String[] permissions = {Manifest.permission.CAMERA, Manifest.permission.READ_EXTERNAL_STORAGE};
    private List<String> permissionList = new ArrayList<>();


    private void getPermission() {
        if (permissionList != null) {
            permissionList.clear();
        }
        //版本判断。当手机系统大于 23 时,才有必要去判断权限是否获取
        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
            //权限是否已经 授权 GRANTED---授权  DINIED---拒绝
            for (String permission : permissions) {
                if (ContextCompat.checkSelfPermission(this, permission) != PackageManager.PERMISSION_GRANTED) {
                    permissionList.add(permission);
                }
            }

            if(!permissionList.isEmpty()){
                ActivityCompat.requestPermissions(this, permissionList.toArray(new String[permissionList.size()]), 1000);
            }else{
                //表示全都授权了
                getPic();
            }
        }
    }
//权限回调
    @Override
    public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions,
                                           @NonNull int[] grantResults) {
        super.onRequestPermissionsResult(requestCode, permissions, grantResults);

        if (requestCode == 1000) {
            //权限请求失败
            if(grantResults.length > 0){
                //存放没授权的权限
                List<String> deniedPermissions = new ArrayList<>();
                for(int i = 0; i < grantResults.length; i++){
                    int grantResult = grantResults[i];
                    String permission = permissions[i];
                    if(grantResult != PackageManager.PERMISSION_GRANTED){
                        deniedPermissions.add(permission);
                    }
                }
                if(deniedPermissions.isEmpty()){
                    //说明都授权了
                    getPic();
                } else {
                    //默认false 第二次提醒会有是否不在询问按钮,选择则为true  不在提醒是否申请权限
                    if (!shouldShowRequestPermissionRationale(deniedPermissions.get(0))) {
                        permissionDialog();
                    }
                }
            }
        }
}

 


    private void permissionDialog() {
        MyAlertDialog permissionDialog = new MyAlertDialog(this);
        permissionDialog.setContentText("需要相机和读写权限,是否去设置?");
        permissionDialog.setCustomDialogListener(new MyDialogClickListener() {
            @Override
            public void clickRight(Dialog dialog, Object data) {
                //允许
                goToAppSetting();
            }

            @Override
            public void clickLeft(Dialog dialog, Object data) {
                //拒绝
            }
        });
    }

 

注意:小米手机在跳转去申请权限的时候会出现,给了权限但是依然无法使用的问题,请进入系统权限设置才可生效

如果是MIUI12,则需要进入隐私保护,在里面找到需要设置的app,授权权限才可

原因是因为跳转的权限是小于系统权限的,跳转设置权限并不包含系统权限,也就是系统权限大于和包含跳转权限。

不知道是bug还是小米故意为之


    private void goToAppSetting() {
        Intent intent = new Intent();
        intent.setAction(Settings.ACTION_APPLICATION_DETAILS_SETTINGS);
        Uri uri = Uri.fromParts("package", getPackageName(), null);
        intent.setData(uri);
        startActivityForResult(intent, 123);
    }

    private void goPhotoAlbum() {
        Intent intent = new Intent();
        intent.setAction(Intent.ACTION_PICK);
        intent.setType("image/*");
        startActivityForResult(intent, 2);
    }


    public void startCamera(){
        Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
        startActivityForResult(intent, 3);
    }

单个权限申请:单个权限

 
打赏
 本文转载自:网络 
所有权利归属于原作者,如文章来源标示错误或侵犯了您的权利请联系微信13520258486
更多>最近资讯中心
更多>最新资讯中心
0相关评论

推荐图文
推荐资讯中心
点击排行
最新信息
新手指南
采购商服务
供应商服务
交易安全
关注我们
手机网站:
新浪微博:
微信关注:

13520258486

周一至周五 9:00-18:00
(其他时间联系在线客服)

24小时在线客服