赞
踩
我们知道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,我们一起成长,共同进步!
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。