2016-02-26 62 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

属于评论,而不是答案。 –