Android圆形头像拍照后“无法加载此图片”的问题解决方法(适配Android7.0)
Feature:点击选择拍照或者打开相册,选取图片进行裁剪最后设置为圆形头像。
Problem:拍好照片,点击裁剪,弹Toast“无法加载此图片”。
Solution:在裁剪的class里加两行代码
intent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION);
intent.addFlags(Intent.FLAG_GRANT_WRITE_URI_PERMISSION);
主要代码如下:
publicstaticfinalStringPHOTO_IMAGE_FILE_NAME="fileImg.jpg";
publicstaticfinalintCAMERA_REQUEST_CODE=100;
publicstaticfinalintIMAGE_REQUEST_CODE=101;
publicstaticfinalintRESULT_REQUEST_CODE=102;
privateFiletempFile=null;
privateUriimageUri;
//跳转相机
privatevoidtoCamera(){
FileoutputImage=newFile(getActivity().getExternalCacheDir(),
PHOTO_IMAGE_FILE_NAME);
try{
if(outputImage.exists()){
outputImage.delete();
}
outputImage.createNewFile();
}catch(IOExceptione){
e.printStackTrace();
}
if(Build.VERSION.SDK_INT>=24){
imageUri=FileProvider.getUriForFile(getActivity(),
"com.liushengjie.smartbutler.fileprovider",outputImage);
}else{
imageUri=Uri.fromFile(outputImage);
}
//启动相机程序
Intentintent=newIntent("android.media.action.IMAGE_CAPTURE");
intent.putExtra(MediaStore.EXTRA_OUTPUT,imageUri);
startActivityForResult(intent,CAMERA_REQUEST_CODE);
dialog.dismiss();
}
//跳转相册
privatevoidtoPicture(){
Intentintent=newIntent(Intent.ACTION_PICK);
intent.setType("image/*");
startActivityForResult(intent,IMAGE_REQUEST_CODE);
dialog.dismiss();
}
@Override
publicvoidonActivityResult(intrequestCode,intresultCode,Intentdata){
if(resultCode!=getActivity().RESULT_CANCELED){
switch(requestCode){
//相机数据
caseCAMERA_REQUEST_CODE:
//tempFile=newFile(Environment.getExternalStorageDirectory(),PHOTO_IMAGE_FILE_NAME);
//startPhotoZoom(Uri.fromFile(tempFile));
startPhotoZoom(imageUri);
break;
//相册数据
caseIMAGE_REQUEST_CODE:
startPhotoZoom(data.getData());
break;
caseRESULT_REQUEST_CODE:
//有可能点击舍弃
if(data!=null){
//拿到图片设置
setImageToView(data);
//删除原来的图片
if(tempFile!=null){
tempFile.delete();
}
}
break;
}
}
}
//裁剪
privatevoidstartPhotoZoom(Uriuri){
if(uri==null){
L.e("uri==null");
return;
}
Intentintent=newIntent("com.android.camera.action.CROP");
intent.setDataAndType(uri,"image/*");
intent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION);
intent.addFlags(Intent.FLAG_GRANT_WRITE_URI_PERMISSION);
//裁剪
intent.putExtra("crop",true);
//宽高比例
intent.putExtra("aspectX",1);
intent.putExtra("aspectY",1);
//图片质量
intent.putExtra("outputX",320);
intent.putExtra("outputY",320);
//发送数据
intent.putExtra("return-data",true);
startActivityForResult(intent,RESULT_REQUEST_CODE);
}
//设置图片
privatevoidsetImageToView(Intentdata){
Bundlebundle=data.getExtras();
if(bundle!=null){
Bitmapbitmap=bundle.getParcelable("data");
profile_image.setImageBitmap(bitmap);
}
}
总结
以上所述是小编给大家介绍的Android圆形头像拍照后“无法加载此图片”的问题解决方法(适配Android7.0),希望对大家有所帮助,如果大家有任何疑问欢迎给我留言,小编会及时回复大家的!