(已解决)程序调用魅族系统裁剪之后直接闪退
说明
几天前发布了一篇博客,是关于程序调用魅族系统裁剪之后直接闪退的问题,在网上找了很久之后也没有找到解决方法,于是决定去请教魅族官方的开发者,我先是在魅族社区里发帖提问,然后有幸在朋友的帮助下得到了魅族运营的联系方式,请求他帮忙联系一下魅族开发者,果然,在一周之后我得到了魅族开发者的回复,我在这里为魅族开发者点赞,感谢他们对待问题的态度,同时也为魅族客服点赞,感谢他们对用户提出的问题进行认真的回复。
好了,废话不多说,今天主要讲讲对于这个问题的解决方案。
魅族官方社区的回复截图
根据回复,我们可以得知,魅族在系统层就处理了 我们经常遇到的 因裁剪图片过大可能会导致内存溢出的问题,这一点还是挺人性化的,再次为魅族系统开发者点赞。
回复中共提供了三种解决方案,通过对比,我们把这三种方案进行结合。
解决方案代码如下:
/**
* 对选择的图片进行裁剪
* @param uri 图片uri
* @param outputX 输出图片宽度
* @param outputY 输出图片高度
* @param requestCode 请求码
*/
public void cropImage(Uri uri, int outputX, int outputY, int requestCode) {
Intent intent =
new Intent("com.android.camera.action.CROP");
intent.setDataAndType(uri, "image/*");
intent.putExtra("crop", "true");
intent.putExtra("aspectX", 1);
intent.putExtra("aspectY", 1);
intent.putExtra("outputX", outputX);
intent.putExtra("outputY", outputY);
intent.putExtra("noFaceDetection", true);
intent.putExtra("return-data", true);
//这里增加第三种方案的代码
intent.putExtra("return-path-if-too-large", true);
intent.putExtra("scale", true);
//这里生成裁剪过后的图片的保存路径
File file = new File(
getApplicationContext().getExternalCacheDir(),
UUID.randomUUID().toString());
intent.putExtra(MediaStore.EXTRA_OUTPUT, Uri.fromFile(file));
intent.putExtra("outputFormat",
Bitmap.CompressFormat.JPEG.toString()); //输入文件格式
startActivityForResult(intent, requestCode);
//把自定义的保存路径保存到全局变量中,方便其他地方调用
this.mCropImageUri = Uri.fromFile(file);
}
覆写的onActivityResult代码如下:
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
switch (requestCode) {
//裁剪图片之后的处理
case REQUEST_CROP_CODE:
if (resultCode == RESULT_OK && data != null){
Uri uri = data.getData();
if (uri != null) {
this.mImageRealPath = uri.getPath();
LogUtil.d("ImageRealPath==>", mImageRealPath);
//更换视频封面
img_video_mask.setImageURI(uri);
} else {
//在其他机型上裁剪过后的图片uri会包含在data中,
//通过data.getData()可以获取到裁剪过后的图片uri
//但在魅族机型上,data.getData获取的uri为null
//因此需要使用我们在调用裁剪时生成的保存路径
this.mImageRealPath =
mCropImageUri.getPath();
LogUtil.d(TAG,
"onActivityResult: ImageRealPath==>"
+ mImageRealPath);
img_video_mask.setImageURI(mCropImageUri);
}
}
break;
super.onActivityResult(requestCode, resultCode, data);
}
作者:zhongzilu
原文地址: http://zhongzilu.github.io/(已解决)程序调用魅族系统裁剪之后直接闪退/