2016-04-23 160 views
0

我無法共享我下載的文件。我的代碼現在的問題是Android共享文件

Intent intent = new Intent(Intent.ACTION_SEND); 
intent.setDataAndType(uri, "text/html"); 
intent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION); 
startActivity(intent); 

的文件是在外部緩存目錄

選擇器打開,但沒有應用程序可以處理它。 ES瀏覽器給我「文件未找到」,其他人以類似的方式失敗。我會用DownloadManager,但我通過POST得到這個文件。我還沒有嘗試過使用FileProvider或媒體商店,但這些看起來像是下一個選項。

我現在的主要需求是獲取文件並將其提供給用戶。什麼是最簡單的方法來做到這一點?

+0

什麼是 「它給用戶」 是什麼意思?這不是你如何使用ACTION_SEND。如果您將其切換到「ACTION_VIEW」,並且擺脫了「addFlags()」,那麼您將擁有有效的代碼來查看該文件,至少在Android N發佈之前。 – CommonsWare

+0

'ACTION_VIEW'的作品,但它只給我幾個應用程序,允許查看。我需要將它發送到某處,例如Dropbox或電子郵件。 – DariusL

回答

1

戰術,你的代碼改成這樣:

Intent intent = new Intent(Intent.ACTION_SEND); 
intent.setType("text/html"); 
intent.putExtra(Intent.EXTRA_STREAM, uri); 
startActivity(intent); 

以下the documentation for ACTION_SEND

從戰略上看,由於sharing files is being discontinued,加a FileProvider to serve your file,如the sharing files documentation所示。

+0

我只是用這段代碼寫了一個答案。謝謝,我會研究這些變化。不是[MediaStore.Files](http://developer.android.com/reference/android/provider/MediaStore.Files.html)也是一個有效的解決方案,特別是如果你不想從用戶隱藏你的文件? – DariusL

+0

@DariusL:「不是MediaStore.Files也是一個有效的解決方案......」 - 我不是粉絲。我認爲'MediaStore'是隻讀的。不同的人一直在使用它來讀寫,我祝他們好運。 – CommonsWare

1

更新你的代碼與下面的代碼: -

Intent shareIntent = new Intent(); 
shareIntent.setAction(Intent.ACTION_SEND); 
shareIntent.putExtra(Intent.EXTRA_STREAM, Uri.fromFile(new File(filePath))); 
shareIntent.setType("text/html"); 
startActivity(Intent.createChooser(shareIntent,"Share")); 
+0

對不起,另一個人是早5分鐘 – DariusL

+0

@DariusL沒問題.... –