2017-08-11 49 views
0

我需要使用用户的播放列表和他们的音乐应用中的歌曲来浏览用户设备上的音频文件,然后将选定的音频文件传递给我们的播放器。在Android上浏览音频文件

Android MediaStore是否包含所有音频文件的主副本以及我从其他应用程序中设置的用户定义的播放列表?我正在寻找类似于iOS上的MediaLibrary的API。

MediaStore Reference Documentation不给我就如何实际使用API​​足够的细节,它似乎并没有在文档的TrainingAPI GuidesSamples部分覆盖。 Random Music Player sample似乎已过时,并且不会与Android Studio一起编译。

我假设我的浏览器代码需要存在于服务中。对?有没有可用的示例/文档?

Content Provider API怎么样?这有时会出现在代码示例中,但不清楚它是否可以访问用户的音频文件。

我试图使用下面的意图,但他们没有给我以我需要的方式访问音频文件。是否有应该使用的现有意图?

使用Intent.ACTION_GET_CONTENT调出设备上文件系统的文件浏览器,显示音频文件。关闭,但不完全是这里需要的。

private fun pickAudioFileWithACTION_GET_CONTENT() { 
    val intent = Intent(Intent.ACTION_GET_CONTENT) 
    intent.setType("audio/*") 
    val chooserIntent = Intent.createChooser(intent, "Select soundfile") 
    startActivityForResult(chooserIntent, SELECT_MUSIC) 
} 

使用MediaStore.INTENT_ACTION_MEDIA_SEARCH允许有一个选择器也是扮演一个应用程序的选择。我无法控制发生的事情,所以我不认为这是需要的。

private fun pickAudioFileWithMediaStoreINTENT_ACTION_MEDIA_SEARCH() { 
    val mediaSearchIntent = Intent(MediaStore.INTENT_ACTION_MEDIA_SEARCH) 
    val mediaSearchChooserIntent = Intent.createChooser(mediaSearchIntent, "Select soundfile") 

    startActivityForResult(mediaSearchChooserIntent, SELECT_MUSIC) 
} 

有关如何工作的建议以及指向文档和/或示例的指南,我们将不胜感激。

回答

1

是否在Android MediaStore包含的所有音频文件

它已编制索引的所有文件的索引的主副本。这可能包括音频文件。没有要求它包括全部音频文件,因为并非所有音频文件都必须位于MediaStore可以到达的地方(例如,用于单独应用的私人存储)。

和用户定义的播放列表,他们是我从其他应用程序设置的吗?

有一个应用程序可用于集中存储播放列表的a MediaStore.Audio.Playlists provider。不需要应用程序来使用它。我怀疑很少有人使用它。但是,Stack Overflow存在一些问题,它们显示了它的使用方式,如this onethis one

我假设我的浏览器代码需要存在于服务中。对?

No.

是否有这样的示例/文档可用?

询问非现场资源被认为是堆栈溢出的主题。

那么Content Provider API呢?

您使用ContentResolver —或事情之一缠,如CursorLoader —查询MediaStore,如果这是你的意思。 This sample app使用CursorLoader查询MediaStore所有视频文件,然后将它们显示在基于RecyclerView的列表中。调整显示音频文件不会特别困难。

使用Intent.ACTION_GET_CONTENT调出设备上文件系统的文件浏览器,显示音频文件。关闭,但不完全是这里需要的。

这就好像你将得到,关于获取音频内容的罐头解决方案,而无需滚动自己的用户界面。你也可以在Android 4.4+上使用ACTION_OPEN_DOCUMENT

+0

非常有帮助 - 它让我走上了正确的轨道。你的工作样本确实有助于弄清楚这是如何工作的。谢谢。 –