如何通过Intent发送base64图像?
我想通过Intent
发送base64图像。我读过如果图像很大,我需要先把它放到内部存储器中,然后从它的路径中检索它,然后通过Intent
发送它。问题是,Android给我烤面包是这样的:如何通过Intent发送base64图像?
上传失败,因为它不包含数据。
我需要说的是,我的自定义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()
但现在其他应用无法读取图像
您必须记住,当您通过意向发送数据时,交易限制为1 MB。发送到活动只有uri,并onCreate方法,新的活动加载图像。
有很多bug在此代码:
您通过
openFileOutput()
写入图像getFilesDir()
,但第三方应用程序在该目录中的文件没有权利您正在使用一个
file:
Uri
,不会在Android 7.0+工作你把
Uri
在Intent
通过setData()
,这是不ACTION_SEND
作品(使用EXTRA_STREAM
)你是不是叫
startActivity()
之前关闭该文件如何(而这应该在实际工作中,这是诸如此类的事情,你会在代码审查获得大喊)
- 你声称的MIME类型是
image/png
,当你的文件的内容不是PNG文件
即使你解决这些,我怀疑你的前提。这个星球上有70亿人。恕我直言,很少,如果他们会想要将base64编码文件放入其他应用程序,因为这些应用程序将无法使用该文件。如果您想允许用户共享图像,则
共享图像,而不是图像的base64编码版本。
那么,图像不是由我创建的。我在base64中获得了图像,无法更改 – soommy12
@ soommy12:对不起,我误解了。您的问题标题具有误导性,因为您并未尝试“通过Intent发送base64图像”。你已经解码了图像。您正尝试“通过意向发送图像”。这消除了我所说的错误之一以及我最后一段中的担忧,所以我用删减线修改了它们。 – CommonsWare
没关系。我已经改变了我的代码并使用'putExtra()'。但知道Messanger或Instagram无法阅读这张图片。这是否因为他们没有访问内部存储空间?如何解决它? – soommy12
嗯,是的,我知道。这就是为什么我不试图直接发送图像到意图,但使用内部存储器 – soommy12