终于找出一个时间,来整理一下,安卓动态权限的获取。仅以此文,记录一下。
首先,拍照权限是比较特殊的,一会儿会一次为例。
首先第一步,在配置文件中,添加所需的文件。
第二步:此处是针对于 拍照权限。
其中,@xml/file_path 为自己创建的文件。
第三步:就是权限的动态获取
在需要请求权限的地方才进行 权限的请求
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
在需要申请权限的页面,代码如下:
实现权限以获取的接口
回调方法中,可以根据控件的ID,进行判断,不同的控件点击事件,调用不同的方法,视情况而定。