2016-02-26 64 views
0

我不太確定要問什麼或在哪裏可以找到這個,所以如果這聽起來特別愚蠢,那麼請原諒。我瞭解如何使用自定義提供程序從我的應用程序共享數據。如何創建意圖/選擇器來共享外部文件?

我想要做的是創建一個選擇器來共享當前正在播放的音樂文件。我從DATA列名在MediaStore,然後在我的活動我有以下代碼:

Intent intent = new Intent(Intent.ACTION_SEND); 
intent.setType("audio/*"); 
intent.putExtra(Intent.EXTRA_STREAM, Uri.parse(song.filename)); 
startActivity(Intent.createChooser(intent, "Share Song File:")); 

這顯示正確的應用與共享的列表,然後選擇一個填充文件 。但是,數據並未包含在內。例如,如果我與Gmail共享附件,則名稱爲的附件顯示爲,然後發送該電子郵件會丟失附件。

注意:是的,共享外部文件是違反當前建議。請尊重我知道我想要做什麼。

回答

-2

使用Uri.fromFile(new File(song.filename))來獲得一個好的Uri來投入意圖。

+0

我所擁有的不是'File'對象,而是'String filename'。例如,''/mnt/sdcard/blahblah.mp3' –

+0

新文件(字符串) –

0

請勿使用file:// URI進行共享。它要求接收應用程序具有READ_EXTERNAL_STORAGE權限。

改爲使用FileProviderexternal-path來允許接收應用通過您的內容提供商訪問文件,而無需特殊權限。

要了解更多信息,請查看Ian Lake的視頻Sharing Content (Android Development Patterns S2 Ep 6)和相關artice Sharing Content between Android apps

+0

我想你沒有讀過這個問題的部分內容,「我知道如何使用自定義提供程序從我的應用程序共享數據「。 –

+0

我的答案是關於如何,更多關於爲什麼使用file:// URIs是錯誤的。 – cketti

+0

屬於評論,而不是答案。 –