程序调用系统裁剪之后直接闪退
说明
我原本是想实现更换头像的功能,程序调用系统相册选取图片,选取图片后直接进行裁剪,我在Activity
里覆写了onActivityResult
方法,然后在该方法里获取返回的图片数据,结果要么是根本没执行到onActivityResult
方法里,要么是获取不到数据,在其他手机上没出现这个问题,唯独在魅族的手机上会有这个问题,我想请问一下魅族的开发者大佬们,这个问题该怎么解决呢?
具体描述
有两种情况,第一种没执行到onActivityResult
裁剪请求代码如下:
/**
* 对选择的图片进行裁剪
* @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("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);
}
覆写的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);
}
}
break;
}
super.onActivityResult(requestCode, resultCode, data);
}
这种情况就是没法运行到
onActivityResult
方法里,裁剪图片之后,点击确定按钮,就直接闪退了,在debug模式下都没办法
第二种情况是能运行到onActivityResult
里,但获取不了返回数据
裁剪请求代码稍微有点区别,具体如下:
/**
* 对选择的图片进行裁剪
* @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("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);
}
覆写的onActivityResult
也稍微有点变化,具体代码如下:
//裁剪图片之后的处理
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 {
Bundle bundle = data.getExtras();
if (bundle != null) {
String filePath = bundle.getString("filePath");
if (!TextUtils.isEmpty(filePath)){
img_video_mask.setImageURI(
Uri.parse(filePath));
}
}
}
}
break;
之所以改成这样的写法,是因为我在网上找到一篇文章在说这个问题,并给出一个解决方案,我根据他的解决方案,依然没有解决问题。地址:http://www.cnblogs.com/over140/archive/2012/12/17/2821874.html
在Debug模式下,截图如下
通过截图可以看到uri
和filePath
都为null
,实在没办法,所以来请教一下魅族的开发大佬们,希望能尽快收到你们的回复,小弟在此表示万分感谢!
作者:zhongzilu
原文地址: https://zhongzilu.github.io/2016/08/30/程序调用魅族系统裁剪之后直接闪退/