android 权限动态申请

项目需求中遇到的 

问题来自于用户会手动禁止app的权限,所以在使用某些权限的时候要判断一下当前app是否授权

直接代码记录

// 要申请的权限
private String[] permissions = {Manifest.permission.WRITE_EXTERNAL_STORAGE};
这个是读写权限

判断是否有权限

private boolean quanxian(){
    // 版本判断。当手机系统大于 23 时,才有必要去判断权限是否获取
    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
        // 检查该权限是否已经获取
        int i = ContextCompat.checkSelfPermission(this, permissions[0]);
        // 权限是否已经 授权 GRANTED---授权  DINIED---拒绝
        if (i != PackageManager.PERMISSION_GRANTED) {
            // 如果没有授予该权限,就去提示用户请求
            return false;
        }
    }
    return true;
}

没有权限弹出 

// 提示用户该请求权限的弹出框
    private void showDialogTipUserRequestPermission() {
        new AlertDialog.Builder(this)
                .setTitle("存储权限不可用")
                .setMessage("需要使用存储权限,您是否允许?(禁止后将无法选择上传图片)")
                .setPositiveButton("立即开启", new DialogInterface.OnClickListener() {
                    @Override
                    public void onClick(DialogInterface dialog, int which) {
                        startRequestPermission();
                    }
                })
                .setNegativeButton("取消", new DialogInterface.OnClickListener() {
                    @Override
                    public void onClick(DialogInterface dialog, int which) {
                        dialog.dismiss();
                        makeToast("用户取消授权");
//                        finish();
                    }
                }).setCancelable(false).show();
    }

用户点击确定,开始请求

// 开始提交请求权限
private void startRequestPermission() {
    ActivityCompat.requestPermissions(this, permissions, 321);
}
 
 
在onActivityResult获取是否授权
if (requestCode == 123) {
    if (android.os.Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
        // 检查该权限是否已经获取
        int i = ContextCompat.checkSelfPermission(this, permissions[0]);
        // 权限是否已经 授权 GRANTED---授权  DINIED---拒绝
        if (i != PackageManager.PERMISSION_GRANTED) {
            // 提示用户应该去应用设置界面手动开启权限
            showDialogTipUserGoToAppSettting();
        } else {
            if (dialog3 != null && dialog3.isShowing()) {
                dialog3.dismiss();
            }
            Toast.makeText(this, "权限获取成功", Toast.LENGTH_SHORT).show();
        }
    }
}

// 提示用户去应用设置界面手动开启权限
private void showDialogTipUserGoToAppSettting(){
    dialog3 = new AlertDialog.Builder(this)
            .setTitle("存储权限不可用").setMessage("请在-应用设置-权限-中,允许***使用存储权限")
            .setPositiveButton("立即开启",new DialogInterface.OnClickListener(){
                @Override
                public void onClick(DialogInterface dialog, int which) {
                    // 跳转到应用设置界面
                    goToAppSetting();
                }
            }).setNegativeButton("取消", new DialogInterface.OnClickListener() {
                @Override
                public void onClick(DialogInterface dialog, int which) {
                    finish();
                }
            }).setCancelable(false).show();

}
// 跳转到当前应用的设置界面
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);
}

猜你喜欢

转载自blog.csdn.net/zuola8579/article/details/79710938
今日推荐