Android 6.0+ 动态权限处理
之前一直没有详细全面的了解整个android6.0之后权限的划分和处理,今天抽出些时间整理一下
首先需要了解一下6.0以后权限的分类,分为普通权限和危险权限,普通权限不用说,只需要在清单文件中进行配置即可;对于危险权限就需要我们去动态配置了,如果不进行配置,就会出现崩溃,下面是危险权限
如果是同一组的权限不用重复授权,也就是说,同一组的权限只要有一个授权了,那么同一组的其它权限也都就授权了
那么危险权限我们已经了解了,下一步如何配置呢
首先需要在清单文件中声明我们需要的应用权限,然后就是在需要申请权限的地方进行动态的配置了,以下是详细的配置过程,咱们以获取相机权限为例,首先需要保证您的手机是android6.0以上,同时项目的targetSdkVersion的版本在23以上
首先在清单文件中注册
<uses-permission android:name="android.permission.CAMERA" />
然后就是动态的配置,下边是封装的BaseActivity
/** * 封装动态权限 */ public class BaseActivity extends AppCompatActivity{ private PermissionListener mListener; private static final int PERMISSION_REQUESTCODE = 100; @Override public void onCreate(Bundle savedInstanceState, PersistableBundle persistentState) { super.onCreate(savedInstanceState, persistentState); } public void requestRunPermisssion(String[] permissions, PermissionListener listener){ mListener = listener; List<String> permissionLists = new ArrayList<>(); for(String permission : permissions){ if(ContextCompat.checkSelfPermission(this, permission) != PackageManager.PERMISSION_GRANTED){ permissionLists.add(permission); } } if(!permissionLists.isEmpty()){ ActivityCompat.requestPermissions(this, permissionLists.toArray(new String[permissionLists.size()]), PERMISSION_REQUESTCODE); }else{ //表示全都授权了 mListener.onGranted(); } } @Override public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) { super.onRequestPermissionsResult(requestCode, permissions, grantResults); switch (requestCode){ case PERMISSION_REQUESTCODE: if(grantResults.length > 0){ //存放没授权的权限 List<String> deniedPermissions = new ArrayList<>(); for(int i = 0; i < grantResults.length; i++){ int grantResult = grantResults[i]; String permission = permissions[i]; if(grantResult != PackageManager.PERMISSION_GRANTED){ deniedPermissions.add(permission); } } if(deniedPermissions.isEmpty()){ //说明都授权了 mListener.onGranted(); }else{ mListener.onDenied(deniedPermissions); } } break; default: break; } } }
调用的地方只需要这样写
initPermission();
private void initPermission() { requestRunPermisssion(new String[]{Manifest.permission.ACCESS_COARSE_LOCATION, Manifest.permission.ACCESS_FINE_LOCATION, Manifest.permission.READ_PHONE_STATE, Manifest.permission.CHANGE_WIFI_STATE}, new PermissionListener() { @Override public void onGranted() { Toast.makeText(MyMemoryActivity.this, "授权通过", Toast.LENGTH_SHORT).show(); init(); initLocation(); } @Override public void onDenied(List<String> deniedPermission) { for(String permission : deniedPermission){ Toast.makeText(MyMemoryActivity.this, "权限被拒绝:" + permission, Toast.LENGTH_SHORT).show(); } } }); }以上就是我整理的内容,仅限参考