admin管理员组文章数量:1530921
针对Android权限(多个权限申请)这个问题,很多小白还是比较困扰,现在这篇文章举例源码做了详细说明,还不懂的朋友可以了解一下。
多个权限:
private String[] permissions = {Manifest.permission.CAMERA, Manifest.permission.READ_EXTERNAL_STORAGE};
private List permissionList = new ArrayList<>();
/**
* 获取相册权限
*/
private void getPermission() {
if (permissionList != null) {
permissionList.clear();
}
//版本判断。当手机系统大于 23 时,才有必要去判断权限是否获取
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
//权限是否已经 授权 GRANTED---授权 DINIED---拒绝
for (String permission : permissions) {
if (ContextCompat.checkSelfPermission(this, permission) != PackageManager.PERMISSION_GRANTED) {
permissionList.add(permission);
}
}
if(!permissionList.isEmpty()){
ActivityCompat.requestPermissions(this, permissionList.toArray(new String[permissionList.size()]), 1000);
}else{
//表示全都授权了
getPic();
}
}
}
//权限回调
@Override
public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions,
@NonNull int[] grantResults) {
super.onRequestPermissionsResult(requestCode, permissions, grantResults);
if (requestCode == 1000) {
//权限请求失败
if(grantResults.length > 0){
//存放没授权的权限
List 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()){
//说明都授权了
getPic();
} else {
//默认false 第二次提醒会有是否不在询问按钮,选择则为true 不在提醒是否申请权限
if (!shouldShowRequestPermissionRationale(deniedPermissions.get(0))) {
permissionDialog();
}
}
}
}
}
/**
* 弹窗是否允许权限
*/
private void permissionDialog() {
MyAlertDialog permissionDialog = new MyAlertDialog(this);
permissionDialog.setContentText("需要相机和读写权限,是否去设置?");
permissionDialog.setCustomDialogListener(new MyDialogClickListener() {
@Override
public void clickRight(Dialog dialog, Object data) {
//允许
goToAppSetting();
}
@Override
public void clickLeft(Dialog dialog, Object data) {
//拒绝
}
});
}
注意:小米手机在跳转去申请权限的时候会出现,给了权限但是依然无法使用的问题,请进入系统权限设置才可生效
如果是MIUI12,则需要进入隐私保护,在里面找到需要设置的app,授权权限才可
原因是因为跳转的权限是小于系统权限的,跳转设置权限并不包含系统权限,也就是系统权限大于和包含跳转权限。
不知道是bug还是小米故意为之
/**
* 拒绝权限,跳转到app设置
*/
private void goToAppSetting() {
Intent intent = new Intent();
intent.setAction(Settings.ACTION_APPLICATION_DETAILS_SETTINGS);
Uri uri = Uri.fromParts("package", getPackageName(), null);
intent.setData(uri);
startActivityForResult(intent, 123);
}
private void goPhotoAlbum() {
Intent intent = new Intent();
intent.setAction(Intent.ACTION_PICK);
intent.setType("image/*");
startActivityForResult(intent, 2);
}
public void startCamera(){
Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
startActivityForResult(intent, 3);
}
单个权限申请:单个权限
版权声明:本文标题:android申请权限一次性申请多个,Android权限(多个权限申请) 内容由热心网友自发贡献,该文观点仅代表作者本人, 转载请联系作者并注明出处:https://m.elefans.com/xitong/1725868861a1046054.html, 本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。
发表评论