android6.0动态申请权限调用图库
1. 权限动态申请,最好在manifests中也加上静态权限。
//veiw的点击事件
public void choosePicture(View view){
// 判断SDK是否>=23
if (Build.VERSION.SDK_INT>=Build.VERSION_CODES.M){
// 判断是否已有权限
if (ContextCompat.checkSelfPermission(this,
Manifest.permission.CAMERA)!= PackageManager.PERMISSION_GRANTED) {
// 申请权限,参数1是当前activity 参数2是我要申请的相关权限(一个String数组)
//参数3是我定义的requestCode,在onRequestPermissionResult()要用来识别是否我的返回,
ActivityCompat.requestPermissions(this,new String[]{
Manifest.permission.WRITE_EXTERNAL_STORAGE
,Manifest.permission.READ_EXTERNAL_STORAGE,
Manifest.permission.CAMERA}, 123);
}
}else {
/**
* 打开选择图片的界面
*/
Intent intent = new Intent(Intent.ACTION_PICK,android.provider.MediaStore.Images.Media.EXTERNAL_CONTENT_URI);
intent.setType("image/*");//相片类型
startActivityForResult(intent, 125);
}
}
2. 权限申请返回结果处理(如果斯达康<23可忽略)
@Override
public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
super.onRequestPermissionsResult(requestCode, permissions, grantResults);
// requestCode识别,找到我自己定义的requestCode
if (requestCode==123) {
boolean grantedAll=true;
for (int rangtResult:grantResults) {
//判断用户是否给予权限
if (rangtResult!=PackageManager.PERMISSION_GRANTED){
grantedAll=false;
break;
}
}
if (grantedAll){
/**
* 打开选择图片的界面
*/
Intent intent = new Intent(Intent.ACTION_PICK,android.provider.MediaStore.Images.Media.EXTERNAL_CONTENT_URI);
intent.setType("image/*");//相片类型
startActivityForResult(intent, 125);
}
}
}
3. 获取已选择的图片并显示(可以添加图片裁剪、压缩等处理)
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
//判断返回的结果
if (resultCode== Activity.RESULT_OK){
// 判断是否是我的请求返回
if (requestCode==125){
if (data!=null) {
// 获取的选择的图片并显示
Uri uri = data.getData();
// getFromPictureHome(uri); //调用系统自带的裁剪功能
iv2.setImageURI(uri);
}
}else if(requestCode==3){
Uri uri=data.getData();
iv2.setImageURI(uri);
}
}
}
4. 处理选择的图片(可忽略,不需要的话)
// 裁减
private void getFromPictureHome(Uri uri) {
Intent intent = new Intent(Intent.ACTION_GET_CONTENT, null);
intent.addCategory(Intent.CATEGORY_OPENABLE);
intent.setType("image/*");
intent.putExtra("scale", true);
//配置是否返回数据
intent.putExtra("return-data", false);
//设置输出位置 uri
intent.putExtra(MediaStore.EXTRA_OUTPUT, uri);
intent.putExtra("outputFormat", "JPEG");
startActivityForResult(intent, 3);
}
权限分组: