android.os.TransactionTooLargeException 与作物活动
Posted
技术标签:
【中文标题】android.os.TransactionTooLargeException 与作物活动【英文标题】:android.os.TransactionTooLargeException with Crop Activity 【发布时间】:2013-08-22 16:30:00 【问题描述】:我有一个应用程序,用户可以在其中上传用户个人资料的图像。在我的应用程序中,我允许用户使用本机裁剪器裁剪图像。但是,当我尝试裁剪大图像时,我的 Logcat 中出现以下错误:
!!! FAILED BINDER TRANSACTION !!!
Exception when starting activity com.example.somename/com.example.somename.Profile
android.os.TransactionTooLargeException
我使用以下代码启动裁剪器:
Intent cropIntent = new Intent("com.android.camera.action.CROP");
cropIntent.setDataAndType(imageFileUri , "image/*");
cropIntent.putExtra("crop", "true");
cropIntent.putExtra("aspectX", 1);
cropIntent.putExtra("aspectY", 1);
cropIntent.putExtra("outputX", 265);
cropIntent.putExtra("outputY", 265);
cropIntent.putExtra("scale", true);
cropIntent.putExtra("return-data", true);
startActivityForResult(cropIntent, PIC_CROP);
然后在我的 onActivityResult 中,以下代码获取裁剪后的图像:
Bundle extras = data.getExtras();
Bitmap selectedBitmap = extras.getParcelable("data");
imgDisplayPic.setImageBitmap(selectedBitmap);
我假设问题在于裁剪器试图将大位图作为可打包返回到我的活动。有没有办法解决?还是另一种获取裁剪图像的方法?
提前感谢您的帮助。
【问题讨论】:
【参考方案1】:如果其他人遇到此问题,我已通过以下链接的帮助设法解决它:http://www.androidworks.com/crop_large_photos_with_android。我通过实施链接中的选项 #2 解决了这个问题。
正如我最初所怀疑的那样,问题是从裁剪器中将大位图作为可包裹发送回。相反,我所做的(如链接所示)是将裁剪器的内容保存到一个临时文件中,然后在我的主要活动/片段中读取该内容。为了不通过 parcelable 发回内容,我必须对上面的代码进行的主要更改是
cropIntent.putExtra("return-data", false);
并添加
cropIntent.putExtra(MediaStore.EXTRA_OUTPUT, tempURI);
其中“tempURI”是将保存裁剪器内容的临时文件的 Uri。然后在 onActivityResult 你需要删除以下行
Bitmap selectedBitmap = extras.getParcelable("data");
相反,您需要一些代码来从临时文件中读取内容。
希望这对遇到此问题的人有所帮助。
编辑: 链接已失效,请尝试Internet Archive 一个。
【讨论】:
以上是关于android.os.TransactionTooLargeException 与作物活动的主要内容,如果未能解决你的问题,请参考以下文章