我有两个应用程序,应用程序 A 和应用程序 B。当我在应用程序 A 中按下一个按钮时,应用程序 B 将被调用。在应用程序 B 中,它具有相机 Activity 和一些其他图像处理选项,如裁剪、调整亮度和对比度。图像处理后,我需要将图像传递给应用程序 A。但是,图像不应该保存在 sd 卡中。
我尝试过的:使用图像到 base64 字符串
第 1 步:我使用这段代码调用了 AppB
Intent i = new
Intent("com.appb.ImageProcessingActivity");
startActivityForResult(i, 100);
第 2 步: 在应用程序 B 中,图像处理后,我将图像转换为 base64 字符串并使用此代码将其发送回应用程序 A。 (图像处理后,图像大小将<150kb)
Intent data = new Intent();
data.putExtra("outputImage", base64ImageString);
setResult(RESULT_OK, data);
finish();
第 3 步:在 App A 中,我将使用此代码获取图像详细信息
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if(requestCode==100 && resultCode==RESULT_OK){
String outputImage = data.getStringExtra("base64ImageString");
byte[] decodedString = Base64.decode(outputImage, Base64.DEFAULT);
Bitmap decodedByte = BitmapFactory.decodeByteArray(decodedString, 0, decodedString.length);
imageView.setImageBitmap(decodedByte);
}
}
但是我无法从 App B 接收 base64 String 到 App A。它显示以下错误(注意:我可以使用此方法发送普通字符串)
JavaBinder: !!! FAILED BINDER TRANSACTION !!! (parcel size = 1058260)
这个答案不被接受
在App B中,将图片保存在sd卡中并将图片路径发送给App B,然后在App A中将图片路径转换为base64,然后删除sd卡中的图片。
最佳答案
首先,它们被称为 Activity 而不是“应用程序”。
其次,您遇到该错误是因为图像太大,无法在此类 Activity 之间传递。如果您仔细查看 logcat,您可能会在“TransactionTooLargeException”的某处发现此错误。
为了避免这种情况并使您的应用运行得更快,您应该将图像保存为外部缓存目录中的文件,并将其路径传递给第二个 Activity ,然后加载它。不要担心图像只会暂时保存,因为它在缓存目录中。
关于android - 在两个应用程序之间传递图像,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50213652/