android - 在两个应用程序之间传递图像

标签 android android-intent

我有两个应用程序,应用程序 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/

相关文章:

android - 小米设备停止前台服务

android - 所有版本的 Android 支持库都具有相同的修订号吗?

java - 当我从另一 Activity 获取结果时,ListView 仅更新一个 View 项,如何获取所有过去的结果?

Android广播接收器在动态注册时不会唤醒应用程序

android - Intent.getType() 在 onNewIntent(Intent intent ) 方法中返回 null

android - 如何在android中连续录制后台音频/语音?

java - 线程问题,无法更改外部 TextView 的值

android - 遍历 SQLite Cursor 需要太多时间

Android 12(SDK > 29)ACTION_IMAGE_CAPTURE 的 Extra_Output 不起作用

android - 安装错误 : INSTALL_PARSE_FAILED_MANIFEST_MALFORMED code included