如何通过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方法,新的活动加载图像。

+0

嗯,是的,我知道。这就是为什么我不试图直接发送图像到意图,但使用内部存储器 – soommy12

有很多bug在此代码:

  • 您通过openFileOutput()写入图像getFilesDir(),但第三方应用程序在该目录中的文件没有权利

  • 您正在使用一个file:Uri,不会在Android 7.0+工作

  • 你把UriIntent通过setData(),这是不ACTION_SEND作品(使用EXTRA_STREAM

  • 你是不是叫startActivity()之前关闭该文件如何(而这应该在实际工作中,这是诸如此类的事情,你会在代码审查获得大喊)

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

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

+0

那么,图像不是由我创建的。我在base64中获得了图像,无法更改 – soommy12

+1

@ soommy12:对不起,我误解了。您的问题标题具有误导性,因为您并未尝试“通过Intent发送base64图像”。你已经解码了图像。您正尝试“通过意向发送图像”。这消除了我所说的错误之一以及我最后一段中的担忧,所以我用删减线修改了它们。 – CommonsWare

+0

没关系。我已经改变了我的代码并使用'putExtra()'。但知道Messanger或Instagram无法阅读这张图片。这是否因为他们没有访问内部存储空间?如何解决它? – soommy12