解决小米miui系统调用系统裁剪图片功能崩溃失败的问题

项目中选择图片作为头像,都要经过剪裁的过程。一般我们都调用系统剪裁的方法。不过该方法在其它系统上都显示正常,但是在miui系统上就出错了。经测试发现其他系统
cropBitmap = data.getParcelableExtra("data");

方法都是有值的,而miui系统却没有。查资料发现miui系统默认的裁剪图片可能裁剪得过大,或对return-data分配的资源不足,造成return-data失败

失败的剪裁方法如下:

Intent intent = new Intent("com.android.camera.action.CROP");
intent.setDataAndType(uri, "image/*");
// 下面这个crop=true是设置在开启的Intent中设置显示的VIEW可裁剪
intent.putExtra("crop", "true");
// aspectX aspectY 是宽高的比例
intent.putExtra("aspectX", 1);
intent.putExtra("aspectY", 1);
// outputX outputY 是裁剪图片宽高
intent.putExtra("outputX", 200);
intent.putExtra("outputY", 200);
intent.putExtra("outputFormat", Bitmap.CompressFormat.PNG.toString());
intent.putExtra("noFaceDetection", true);
intent.putExtra("return-data", true);
startActivityForResult(intent, REQUE_CODE_CROP);


解决方案:

剪裁后保存资源路径uri,在onActivityResult()方法中再提取uri图片转化成bitmap即可。

修改后的方法如下:

Intent intent = new Intent("com.android.camera.action.CROP");
intent.setDataAndType(uri, "image/*");
// 下面这个crop=true是设置在开启的Intent中设置显示的VIEW可裁剪
intent.putExtra("crop", "true");
// aspectX aspectY 是宽高的比例
intent.putExtra("aspectX", 1);
intent.putExtra("aspectY", 1);
// outputX outputY 是裁剪图片宽高
intent.putExtra("outputX", 200);
intent.putExtra("outputY", 200);
intent.putExtra("outputFormat", Bitmap.CompressFormat.PNG.toString());
intent.putExtra("noFaceDetection", true);
/**
 * 此方法返回的图片只能是小图片(sumsang测试为高宽160px的图片)
 * 故只保存图片Uri,调用时将Uri转换为Bitmap,此方法还可解决miui系统不能return data的问题
 */
//        intent.putExtra("return-data", true);
uritempFile = Uri.parse("file://" + "/" + Environment.getExternalStorageDirectory().getPath() + "/" + "small.jpg");
intent.putExtra(MediaStore.EXTRA_OUTPUT, uritempFile);
startActivityForResult(intent, REQUE_CODE_CROP);

try {
    cropBitmap= BitmapFactory.decodeStream(getContentResolver().openInputStream(uritempFile));
} catch (FileNotFoundException e) {
    e.printStackTrace();
}

好了,这样就解决了,如果有更好的方法欢迎留言!




你可能感兴趣的:(Android)