2017-08-30 127 views
0

我想通過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()但現在其他應用無法讀取圖像

回答

0

您必須記住,當您通過意向發送數據時,交易限制爲1 MB。發送到活動只有uri,並onCreate方法,新的活動加載圖像。

+0

嗯,是的,我知道。這就是爲什麼我不試圖直接發送圖像到意圖,但使用內部存儲器 – soommy12

1

有很多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