单个权限申请:
private String storagePermission[] = {Manifest.permission.READ_EXTERNAL_STORAGE};
/**
* 获取相册权限
*/
private void getStoragePermission() {
//版本判断。当手机系统大于 23 时,才有必要去判断权限是否获取
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
//权限是否已经 授权 GRANTED---授权 DINIED---拒绝
if (ContextCompat.checkSelfPermission(this, storagePermission[0]) != PackageManager.PERMISSION_GRANTED) {
ActivityCompat.requestPermissions(CertificationActivity.this, storagePermission, 1001);
} else {
goPhotoAlbum();
}
}
}
//权限回调
@Override
public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions,
@NonNull int[] grantResults) {
super.onRequestPermissionsResult(requestCode, permissions, grantResults);
if (requestCode == 1001) {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
if (grantResults[0] != PackageManager.PERMISSION_GRANTED) {
//默认false 第二次提醒会有是否不在询问按钮,选择则为true 不在提醒是否申请权限
if (!shouldShowRequestPermissionRationale(permissions[0])) {
permissionDialog();
}
} else {
MyToast.show("权限已开启");
goPhotoAlbum();
}
}
}
}
/**
* 弹窗是否允许权限
*/
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) {
//拒绝
}
});
}
/**
* 拒绝权限,跳转到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);
}
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if (requestCode == 123) {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
if (ContextCompat.checkSelfPermission(this, storagePermission[0]) != PackageManager.PERMISSION_GRANTED) {
//默认false 第二次提醒会有是否不在询问按钮,选择则为true 不在提醒是否申请权限
if (!shouldShowRequestPermissionRationale(storagePermission[0])) {
permissionDialog();
}
} else {
MyToast.show("相关权限已开启");
}
}
}
if (requestCode == 2) {
Bitmap bm = null;
//外界的程序访问ContentProvider所提供数据 可以通过ContentResolver接口
ContentResolver resolver = getContentResolver();
//此处的用于判断接收的Activity是不是你想要的那个
try {
Uri originalUri = data.getData();//获得图片的uri
bm = MediaStore.Images.Media.getBitmap(resolver, originalUri);//显得到bitmap图片
//这里开始的第二部分,获取图片的路径:
String[] proj = {MediaStore.Images.Media.DATA};
//android多媒体数据库的封装接口,具体的看Android文档
Cursor cursor = managedQuery(originalUri, proj, null, null, null);
//这个是获得用户选择的图片的索引值
int column_index = cursor.getColumnIndexOrThrow(MediaStore.Images.Media.DATA);
//将光标移至开头 ,这个很重要,不小心很容易引起越界
cursor.moveToFirst();
//最后根据索引值获取图片路径
String path = cursor.getString(column_index);
imgPositive.setImageBitmap(bm);
}catch (IOException e) {
MyLogger.e("========", e.getMessage());
}
}
}
/**
* 打开相册
*/
private void goPhotoAlbum() {
Intent intent = new Intent();
intent.setAction(Intent.ACTION_PICK);
intent.setType("image/*");
startActivityForResult(intent, 2);
}
多个权限申请:多个权限