android动态获取权限方法
16lz
2021-01-26
安卓6.0以上动态权限申请
- 1.设置一个权限的数组,将需要动态申请的权限写入
- 2.创建页面时进行权限申请
- 3.以下是动态申请的方法
1.设置一个权限的数组,将需要动态申请的权限写入
String[] permissions = new String[]{Manifest.permission.RECORD_AUDIO,
Manifest.permission.READ_EXTERNAL_STORAGE, Manifest.permission.WRITE_EXTERNAL_STORAGE, Manifest.permission.CAMERA};
List mPermissionList = new ArrayList<>();
int mRequestCode = 100;
2.创建页面时进行权限申请
if (Build.VERSION.SDK_INT >= 23) {//6.0才用动态权限
initPermission();
} else {
initview();
}
3.以下是动态申请的方法
//权限判断和申请
private void initPermission() {
mPermissionList.clear();//清空没有通过的权限 //逐个判断你要的权限是否已经通过 for (int i = 0; i < permissions.length; i++) { if (ContextCompat.checkSelfPermission(this, permissions[i]) != PackageManager.PERMISSION_GRANTED) { mPermissionList.add(permissions[i]);//添加还未授予的权限 } } //申请权限 if (mPermissionList.size() > 0) {//有权限没有通过,需要申请 ActivityCompat.requestPermissions(this, permissions, mRequestCode); } else { //说明权限都已经通过,可以做你想做的事情去 // initview(); }}//请求权限后回调的方法//参数: requestCode 是我们自己定义的权限请求码//参数: permissions 是我们请求的权限名称数组//参数: grantResults 是我们在弹出页面后是否允许权限的标识数组,数组的长度对应的是权限名称数组的长度,数组的数据0表示允许权限,-1表示我们点击了禁止权限@Overridepublic void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) { super.onRequestPermissionsResult(requestCode, permissions, grantResults); boolean hasPermissionDismiss = false;//有权限没有通过 if (mRequestCode == requestCode) { for (int i = 0; i < grantResults.length; i++) { if (grantResults[i] == -1) { hasPermissionDismiss = true; } } //如果有权限没有被允许 if (hasPermissionDismiss) { showPermissionDialog();//跳转到系统设置权限页面,或者直接关闭页面,不让他继续访问 } else { //全部权限通过,可以进行下一步操作。。。 initview(); } }}/** * 不再提示权限时的展示对话框 */AlertDialog mPermissionDialog;private void showPermissionDialog() { if (mPermissionDialog == null) { mPermissionDialog = new AlertDialog.Builder(this) .setMessage("已禁用权限,请手动授予") .setPositiveButton("设置", new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { cancelPermissionDialog(); //此处是手动设置权限后跳转回来的页面 /* Intent intent = new Intent(); intent.setAction(Settings.ACTION_APPLICATION_DETAILS_SETTINGS); Uri uri1 = Uri.fromParts("package", SixMainActivity.this.getPackageName(), null); intent.setData(uri1); startActivity(intent); finish();*/ } }) .setNegativeButton("取消", new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { //关闭页面或者做其他操作 initPermission(); cancelPermissionDialog(); } }) .create(); } mPermissionDialog.show();}//关闭对话框private void cancelPermissionDialog() { mPermissionDialog.cancel();}
更多相关文章
- Android类参考---Manifest.permission_group
- 〖Android〗代理与正常网络分开同步CyangenMod源码
- Bitmap保存图片到指定路径
- 初学Android,字符串,数字,尺寸,数组资源(十二)
- Google Maps API申请 之 Android(安卓)Maps API
- Android签名及权限变化详解
- Android(安卓)6.0 存储权限管理
- android 下自定义view, android.view.InflateException
- Android:在AndroidManifest中注册BroadcastReceiver的权限问题