如何通过Intent发送base64图像?

时间:2017-08-30 13:55:01

标签: android android-intent base64

我正在尝试通过Intent发送base64图像。我已经读过,如果图像很大,我需要先将它放到内部存储中,然后从路径中检索它,然后通过Intent发送它。问题是android正在给我这样的吐司:

上传失败,因为它不包含数据。

我需要说一切都是在我通过WebView的自定义context中完成的。也许这就是问题所在?我的API是21.我把代码放在这里:

 this.webView.setDownloadListener((new DownloadListener() {
                @Override
                public void onDownloadStart(String url, String userAgent, String contentDisposition, String mimetype, long contentLength) {

                        try {
                            if(url != null) {
                                FileOutputStream fos;
                                fos = context.openFileOutput("image.png", Context.MODE_PRIVATE);
                                byte[] decodedStr = Base64.decode(url, Base64.DEFAULT);
                                fos.write(decodedStr);


                                Intent sendIntent = new Intent();
                                sendIntent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
                                sendIntent.setAction(Intent.ACTION_SEND);
                                sendIntent.putExtra(Intent.EXTRA_STREAM, Uri.fromFile(new File("file://" + context.getFilesDir() + "/chart.png")));
                                sendIntent.setType("image/png");
                                getContext().startActivity(sendIntent);
                                fos.flush();
                                fos.close();
                            }
                        } catch (IOException e) {
                            e.printStackTrace();
                        }
                    }                   
            }));

我的base64如下所示:

data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAArgAAAIACAYAAABpWR83AAAgAElEQVR4Xux9B3xU15X+ESBUEEIVgbpAgCq9V9tg3B1jO3FLcUnsuCa2s7v/TeJksym7yaa6pttOcY2Nu8

它要长得多。我只是在这里放一个剪切版本,以使我的问题更具可读性。

谢谢你的时间!

@EDIT

我觉得不清楚他想要达到什么目的。我正在使用本教程:https://developer.android.com/training/sharing/send.html 但不同的是base64图像

** @ EDIT 2 **

将方法更改为putExtra(),但现在其他应用无法读取图片

2 个答案:

答案 0 :(得分:0)

您必须记住,按意图发送数据时,事务限制为1 MB。仅发送到活动uri和onCreate方法,新启动的活动加载图像。

答案 1 :(得分:0)

此代码中存在许多错误:

  • 您正在通过getFilesDir()将图片写入openFileOutput(),但第三方应用无权访问该目录中的文件

  • 您使用的是file: Uri,但无法在Android 7.0 +上使用

  • 您将Uri放在Intent通过setData(),这不是ACTION_SEND的工作方式(使用EXTRA_STREAM

  • 在调用startActivity()之前,你没有关闭文件(虽然这应该在实践中起作用,但它会在代码审查中被大吼大叫)

- 当您的文件内容不是PNG文件时,您声称MIME类型为image/png

即使你解决了这些问题,我也会质疑你的前提。这个星球上有大约70亿人。恕我直言,很少有人想要将base64编码的文件放到其他应用程序中,因为这些应用程序将无法使用该文件。如果您想允许用户共享图片,共享图片,而不是图片的base64编码版本。