繁体   English   中英

查询整个Media Store时获取AUDIO_ID

[英]Getting AUDIO_ID when querying the whole Media Store

在知道了_ID和AUDIO_ID之间的区别( _ID和AUDIO_ID列之间有什么区别? )之后,我正在改变我的查询以使用AUDIO_ID,但是我在这里遇到了一些问题。

这是我的代码片段,旨在查询外部存储中的所有音频文件,并为每个音频文件制作带有嵌入式AUDIO_ID的“音乐”实例。

Uri uri = android.provider.MediaStore.Audio.Media.EXTERNAL_CONTENT_URI;
Cursor cur = mContentResolver.query(uri, null, 
    MediaStore.Audio.Media.IS_MUSIC + " = 1", null, null);

int artistColumn = cur.getColumnIndex(MediaStore.Audio.Media.ARTIST);
int titleColumn = cur.getColumnIndex(MediaStore.Audio.Media.TITLE);
int idColumn = cur.getColumnIndex(MediaStore.Audio.Playlists.Members.AUDIO_ID);

// All of the above columns return the right integers, 
// except idColumn which returns -1 thus making my further code below throws an exception

do{
    Music music = new Music(); // it's my music class
    music.setArtist( cur.getString(artistColumn) );
    music.setTitle( cur.getString(titleColumn) );
    music.setId( cur.getLong(idColumn) ); // error here, because idColumn = -1 (column not found)

    // ......
} while (cur.moveToNext())

查询MediaStore.Audio.Media.EXTERNAL_CONTENT_URI时,为什么无法获取AUDIO_ID列? 有没有办法检索它? (任何变通方法感谢)

我需要它,因为我的应用需要绝对引用音频文件,如答案评论中所述 - > https://stackoverflow.com/a/17648131/670623

谢谢 :)

编辑

我发现一个问题的解决方案接近我正在搜索的内容(它可以获得AUDIO_ID),但是它旨在列出某些播放列表中的所有音频文件。 虽然我关注的是查询整个媒体商店的AUDIO_ID,无论他们是哪个播放列表。

给定Android音乐播放列表名称,如何找到播放列表中的歌曲?

我使用MediaStore.Audio.MediaMediaStore.Audio.Playlists.Members数据库进行了一些测试。 我创建了一个小的播放列表,其中包含多次相同的歌曲,数据库如下所示:

播放列表数据库

+---------------------------+
|_ID | AUDIO_ID | songTitle |
+---------------------------+
|273 | 2913     | Alone     |
|274 | 1487     | Baby      |
|275 | 2913     | Alone     |
|276 | 2913     | Alone     |
|277 | 1487     | Baby      |
|278 | 2648     | Battery   |
+---------------------------+

正如所料, _ID是此播放列表中的本地唯一标识符。 当然,可能有其他几个播放列表具有自己的_ID标识符。 AUDIO_ID不能用于标识此数据库中的特定行,因为同一首歌可以在单个播放列表中多次出现。

AUDIO_ID是全局唯一标识符,对于某首歌曲始终是相同的。

现在让我们看一下MediaStore.Audio.Media数据库。 在这里,存储了MediaStore系统已知的所有歌曲。 (这只是摘录)

媒体数据库

+-------------------+
|_ID  | songTitle   |
+-------------------+
|      ....         |
|1487 | Baby        |
|      ....         |
|2648 | Battery     |
|     ....          |
|2913 | Alone       |
|     ....          |
+-------------------+

似乎MediaStore.Audio.Media中的_ID标识符用作全局唯一标识符,在MediaStore.Audio.Playlists.Members数据库中称为AUDIO_ID

起初这看起来很奇怪,但每首歌都必须包含在MediaStore.Audio.Media ,它只能出现一次 由于只有一个这样的数据库,因此该数据库中的_ID对于每首歌曲应该是全局唯一的。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM