android 批量申请权限
2019-02-20 本文已影响257人
android_haihong
Android开发时,到6.0系统上之后,有的权限就得申请才能用了。
Android将权限分为正常权限 和 危险权限
详细可参考: (https://www.cnblogs.com/liuzhipenglove/p/7102692.html)
网上也有很多参考例子,我这里总结下我的理解和用法
我们知道在Android6.0(SDK等级是23)以后有些权限是需要动态申请的
然后这里主要记录下如何同时动态申请多个权限
我申请的权限有三个:READ_EXTERNAL_STORAGE,WRITE_EXTERNAL_STORAGE,CAMERA,分别是读,写,还有相机权限, INTERNET的话我发现静态注册也是可以的,当然以防万一也可以加上.然后就是虽然是动态申请,但是还是需要在AndroidManifest.xml文件中进行静态申请的:
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.CAMERA"/>
然后是动态权限申请
<1>首先声明一个数组permissions,将所有需要申请的权限都放在里面
//1、首先声明一个数组permissions,将所有需要申请的权限都放在里面
String[] permissions = new String[]{
Manifest.permission.CAMERA,
Manifest.permission.READ_EXTERNAL_STORAGE,
Manifest.permission.WRITE_EXTERNAL_STORAGE};
<2>创建一个mPermissionList,逐个判断哪些权限未授权,将未授权的权限存储到mPermissionList中
// 声明一个集合,用来存储用户拒绝授权的权
List<String> mPermissionList = new ArrayList<>();
<3>声明一个请求码,在请求权限的回调方法onRequestPermissionsResult中需要判断使用
//10000比较霸气
private static final int MY_PERMISSIONS_REQUEST_CODE = 10000;
<4>进行权限判断和申请
private void getPermissions() {
mPermissionList.clear(); //清空已经允许的没有通过的权限
for (int i = 0; i < permissions.length; i++) { //逐个判断是否还有未通过的权限
if (ContextCompat.checkSelfPermission(MainActivity.this, permissions[i]) != PackageManager.PERMISSION_GRANTED) {
mPermissionList.add(permissions[i]);
}
}
if (mPermissionList.size() > 0) { //有权限没有通过,需要申请
ActivityCompat.requestPermissions(this, permissions, MY_PERMISSIONS_REQUEST_CODE);
} else {
Log.e("getPermissions() >>>", "已经授权"); //权限已经都通过了
}
}
<5>请求权限后回调的方法,在权限请求完成后做个判断,是否完成了所有权限的申请,
@Override
public void onRequestPermissionsResult(int requestCode, String[] permissions, int[] grantResults) {
super.onRequestPermissionsResult(requestCode, permissions, grantResults);
boolean hasPermissionDismiss = false; //有权限没有通过
if (MY_PERMISSIONS_REQUEST_CODE == requestCode) {
for (int i = 0; i < grantResults.length; i++) {
if (grantResults[i] == -1) {
hasPermissionDismiss = true; //发现有未通过权限
break;
}
}
}
if (hasPermissionDismiss) { //如果有没有被允许的权限
//假如存在有没被允许的权限,可提示用户手动设置 或者不让用户继续操作
} else {
Log.e("onRequestPermissionsResult >>>", "已全部授权");
}
}
还有记录一个坑
image.png
如果你的gradle文件中
targetSdkVersion 参数设置成了21的话 等于是用6.0以前的版本运行,这样的话有可能导致无法动态申请权限,这点需要特别注意下
如若有补充,留言区留下你的宝贵意见,谢谢!!!