首页 > 编程知识 正文

android9动态权限申请,android动态权限框架

时间:2023-05-03 15:30:36 阅读:156545 作者:2408

目录 一. manifest注册权限 二、代码动态申请权限 三.勾选“不咨询”时的处理 一. manifest注册权限manifest xmlns 3360 Android=' http://schemas.Android.com/apk/RES/Android ' package='xxxxx

xx ' uses-permission Android 3360 name=' Android.permission.record _ audio '/uses-permission Android 3360 name=' Android 3360 name uses-permission Android 3360 name=' Android.permission.write _ extextere

//需要批准的权限数组privatestring [ ] permissions={ manifest.permission.record _ audio,manifest.permission.read _ externterns 权限判断

//当前设备的系统版本=23if (build.version.SDK _ int=build.version _ codes.m ) ({ for (string permission : permision ) ) { if (context compat.checkselfpermission (get application ),permission )==package manager.permission _ denied } ii refef }//当前设备系统版本23直接初始化} else { init (; (/)直接初始化if,但不具有拒绝批准的权限(refused list==null|| refused list.size )==0) { init; } else { //权限activity compat.request permissions (this,refusedlist.toarray ) newstring[0],REQUEST_CODE ); }权限申请的结果处理

@ overridepublicvoidonrequestpermissionsresult (intrequestcode,@ nonnull @ not null string [ ] permissions,@ nonull @ not not nt

ermissionsResult(requestCode, permissions, grantResults); //清空 refusedList.clear(); if (requestCode == REQUEST_CODE) { for (int i = 0; i < grantResults.length; i++) { if (grantResults[i] == PackageManager.PERMISSION_DENIED) { refusedList.add(permissions[i]); } } } if (refusedList.size() == 0) init(); else ActivityCompat.requestPermissions(this, refusedList.toArray(new String[0]), REQUEST_CODE);}

三、对勾选了“不在询问”的处理

如果用户勾选了“不在询问”的处理

refusedList.clear(); //首次授权判断 if (requestCode == REQUEST_CODE) { for (int i = 0; i < grantResults.length; i++) { if (grantResults[i] == PackageManager.PERMISSION_DENIED) { refusedList.add(permissions[i]); } } } //再次授权判断 if (requestCode == REQUEST_CODE_02) { for (int i = 0; i < grantResults.length; i++) { if (grantResults[i] == PackageManager.PERMISSION_DENIED) { refusedList.add(permissions[i]); if (!ActivityCompat.shouldShowRequestPermissionRationale(this, permissions[i])) { AlertDialog dialog; AlertDialog.Builder builder = new AlertDialog.Builder(this); builder.setMessage("有必须权限未被授权,这将影响APP的使用,请手动授权!"); builder.setPositiveButton("确认", new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { dialog.dismiss(); //跳转到应用手动授权 Intent intent = new Intent(); intent.setAction(android.provider.Settings.ACTION_APPLICATION_DETAILS_SETTINGS); intent.setData(Uri.parse("package:" + MainActivity.this.getPackageName())); startActivity(intent); } }); builder.setNegativeButton("退出", new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { dialog.dismiss(); System.exit(0); } }); dialog = builder.create(); dialog.setCancelable(false); dialog.show(); return; } } } } if (refusedList.size() == 0) { init(); } else { ActivityCompat.requestPermissions(this, refusedList.toArray(new String[0]), REQUEST_CODE_02); }}

注意:

houldShowRequestPermissionRationale方法返回值分几种情况:

第一次请求该权限,返回false。请求过该权限并被用户拒绝,返回true。请求过该权限,但用户拒绝的时候勾选不再提醒,返回false。

上面的代码只是例子是存在bug的,仅供参考!

如果感觉对您有意义,就给博主一些鼓励(点赞、关注、收藏),如果有错误欢迎大家评论提出。

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。