安卓动态权限的获取

终于找出一个时间,来整理一下,安卓动态权限的获取。仅以此文,记录一下。

首先,拍照权限是比较特殊的,一会儿会一次为例。

首先第一步,在配置文件中,添加所需的文件。

安卓动态权限的获取_第1张图片

第二步:此处是针对于 拍照权限。

安卓动态权限的获取_第2张图片

其中,@xml/file_path 为自己创建的文件。

安卓动态权限的获取_第3张图片

 第三步:就是权限的动态获取

在需要请求权限的地方才进行 权限的请求

 1.检查是否包含所需权限

2.如果没有包含权限,请求开启权限或者去往设置权限页面

3.包含权限,就直接进行拍照等,相关操作。

代码如下:

private static final String[] permissions = {
        Manifest.permission.WRITE_EXTERNAL_STORAGE,
        Manifest.permission.CAPTURE_VIDEO_OUTPUT,
        Manifest.permission.CAMERA,
        Manifest.permission.RECORD_AUDIO
};

申请权限的权限组

/**
 * 检查权限有没有获取
 */
public void requestPerssionAtFirst(HomeView.HomeGetPermission listener, int resId) {
    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
        // 检查该权限是否已经获取
        int i = ContextCompat.checkSelfPermission(screen, permissions[0]);
        // 权限是否已经 授权 GRANTED---授权  DINIED---拒绝
        if (i != PackageManager.PERMISSION_GRANTED) {
            // 如果没有授予该权限,就去提示用户请求
            showDialogTipUserRequestPermission();
        } else {//获取权限之后 要进行的操作

            listener.havePermission(resId);//有权限之后的操作

        }
    }
}

// 提示用户该请求权限的弹出框
private void showDialogTipUserRequestPermission() {
    new AlertDialog.Builder(screen)
            .setTitle("相机权限、读写权限")
            .setMessage("由于需要摄像,需要开启相机权限\n" +
                    "存储文件,需要开启读写权限\n" +
                    "否则无法正常使用")
            .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) {
                    App.showToast("请允许权限开启");
                    screen.finish();
                }
            }).setCancelable(false).show();
}

// 开始提交请求权限
private void startRequestPermission() {
    ActivityCompat.requestPermissions(screen, permissions, 321);
}


// 提示用户去应用设置界面手动开启权限
public void showDialogTipUserGoToAppSettting() {
    dialog = new AlertDialog.Builder(screen)
            .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) {
                    App.showToast("请允许权限开启");
                    screen.finish();
                }
            }).setCancelable(false).show();
}

// 跳转到当前应用的设置界面
private void goToAppSetting() {
    Intent intent = new Intent();
    intent.setAction(Settings.ACTION_APPLICATION_DETAILS_SETTINGS);
    Uri uri = Uri.fromParts("package", App.getContext().getPackageName(), null);
    intent.setData(uri);
    screen.startActivityForResult(intent, 123);
}

暴露一个接口,根据实际需求,设置参数,动态设置。可以设置成控件的ID

 

在需要申请权限的页面,代码如下:

实现权限以获取的接口

安卓动态权限的获取_第4张图片

 回调方法中,可以根据控件的ID,进行判断,不同的控件点击事件,调用不同的方法,视情况而定。

 

 

你可能感兴趣的:(安卓进阶)