2012-02-01 60 views
2

我正在使用ACTION_SEND從我的應用程序中的內容提供程序發送文件作爲GMail中的電子郵件附件。這很好,除了我不能以編程方式指定附件的文件名。當我的URI是如何爲ACTION_SEND指定文件名?

內容://my.documentcontentprovider/321

附件的文件名是321 321的文檔ID。

我查看了Intent的規範,沒有看到指定文件名的EXTRA_鍵。唯一的解決辦法我能想出是追加文件名,以我的URI:

內容://my.documentcontentprovider/321/photo.jpg

它應該工作,但似乎有點哈克。如果有人有更好的想法,請附和這裏是我的代碼,如果它是非常有用的。

Intent sendDoc = new Intent(); 
    sendDoc.setAction(Intent.ACTION_SEND); 
    sendDoc.putExtra(Intent.EXTRA_SUBJECT, doc.name); 
    sendDoc.putExtra(Intent.EXTRA_STREAM, DocumentContentProvider.getUri(doc.id)); 
    sendDoc.setType(doc.contentType); 
    this.foldersFragment.startActivity(sendDoc); 
+0

如果不知道DocumentContentProvider查詢將返回什麼,很難提供幫助。我認爲它不是一個光標。它是一個File對象嗎? – JosephL 2012-02-01 03:08:28

回答

0

你需要通過文件路徑爲Intent.EXTRA_STREAM。精心設計的ContentProvider在_DATA列中公開文件路徑。

+2

謝謝你指點我正確的方向。問題出在我的ContentProvider實現中,就像你期望的那樣。在實現ContentProvider.query()來處理MediaStore.MediaColumns.DISPLAY_NAME之後,GMail開始正確設置文件名。 – 2012-02-01 23:06:29

+2

「精心設計的ContentProvider在_DATA列中顯示文件路徑」 - 首先,不是由ContentProvider服務的每個流都由文件表示。其次,並非每個文件都可以通過第三方應用程序訪問。谷歌一直在指導開發人員將「文件路徑」暴露給其​​他應用程序一段時間。我不記得上次我看到'_DATA'爲推薦模式。 ''ContentProviders'像'FileProvider'直接從'Uri'提供流。 – CommonsWare 2014-07-04 10:57:58

相關問題