我们知道Android6.0之后对权限做个要求,必须动态申请,现在来总结一下动态申请权限的流程:
1、先判断有没有我们需要的权限,有的话进行下一步操作,没有的话申请
//判断是否已经获取相应权限
if (ContextCompat.checkSelfPermission(MainActivity.this, Manifest.permission.WRITE_EXTERNAL_STORAGE) == PackageManager.PERMISSION_GRANTED &&
ContextCompat.checkSelfPermission(MainActivity.this, Manifest.permission.CAMERA) == PackageManager.PERMISSION_GRANTED) {
init();
}
// 若没有获得相应权限,则弹出对话框获取
else { //记录是否获得权限
ActivityCompat.requestPermissions(MainActivity.this, new String[]{Manifest.permission.CAMERA, Manifest.permission.WRITE_EXTERNAL_STORAGE}, REQUESTCODE);
}
这里我们可以把需要的权限都列出来,当然判断的时候也要判断所有的权限是否有权限;
2、在Activity的onRequestPermissionsResult方法里我们判断我们申请的权限是否都有了权限
@Override
public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
super.onRequestPermissionsResult(requestCode, permissions, grantResults);
if (requestCode == this.REQUESTCODE) {
// 如果用户赋予全选,则执行相应逻辑
boolean haveAllPermission = true;
for (int grantResult : grantResults) {
if (grantResult != PackageManager.PERMISSION_GRANTED) {
haveAllPermission = false;
}
}
if (haveAllPermission) {
init();
} else {
Toast.makeText(this, "无读取存储权限", Toast.LENGTH_SHORT).show();
}
}
super.onRequestPermissionsResult(requestCode, permissions, grantResults);
}
其中里面的for循环很重要,不要漏掉。
至此权限申请流程完毕。
欢迎小伙伴加入Android开发群:579699145,我们一起成长,共同进步!