我正在尝试通过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()
,但现在其他应用无法读取图片
答案 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编码版本。