在知道 _ID 和 AUDIO_ID 之间的区别(What is difference between _ID and AUDIO_ID column?)后,我将查询更改为使用 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())
为什么查询时无法获取该AUDIO_ID
列MediaStore.Audio.Media.EXTERNAL_CONTENT_URI
?有没有办法找回它?(任何解决方法表示赞赏)
我需要它,因为我的应用程序需要绝对引用音频文件,如此处的答案评论中所述-> https://stackoverflow.com/a/17648131/670623
谢谢 :)
编辑
我发现了一个与我正在搜索的解决方案接近的问题(它可以获取 AUDIO_ID),但它旨在列出来自某些播放列表的所有音频文件。虽然我担心的是在整个媒体存储中查询 AUDIO_ID,无论它们来自哪个播放列表。