我正在尝试获取手机中存在的所有歌曲的专辑封面。我正在使用MediaStore获取所有歌曲标题,艺术家等。我应该如何获取专辑封面?我试着使用MediaMetaDataRetriever,但越来越困惑如何使用它的多个文件。任何人都可以调整这个代码?为所有音乐文件获取专辑封面
活动类:
public void getSongList() {
// retrieve song info
ContentResolver musicResolver = getContentResolver();
Uri musicUri = android.provider.MediaStore.Audio.Media.EXTERNAL_CONTENT_URI;
Cursor musicCursor = musicResolver.query(musicUri, null, null, null,
null);
metaRetriver.setDataSource(MainActivity.this,musicUri); // now how to loop over this
if (musicCursor != null && musicCursor.moveToFirst()) {
// get columns
int titleColumn = musicCursor.getColumnIndex(MediaColumns.TITLE);
int idColumn = musicCursor.getColumnIndex(BaseColumns._ID);
int artistColumn = musicCursor.getColumnIndex(AudioColumns.ARTIST);
// add songs to list
do {
long thisId = musicCursor.getLong(idColumn);
String thisTitle = musicCursor.getString(titleColumn);
String thisArtist = musicCursor.getString(artistColumn);
songList.add(new Song(thisId, thisTitle, thisArtist));
} while (musicCursor.moveToNext());
}
感谢马特的答案。我已经在上面发布了我的答案。但是我在创建时在设备上获取了大约300首歌曲的专辑封面,延迟了2-3秒。有什么方法可以加快速度吗? – Siju
是的,你可以在一个查询中得到它们。您可以删除WHERE参数,并遍历所有专辑,获取他们的专辑封面,或使用相册ID构建WHERE IN子句。请记住,如果你要将参数绑定到'?',那么你只限于999个参数。 – Matt
你可以请给我代码如何做到这一点。获取专辑封面需要很长时间。我也试过使用异步任务。但专辑艺术的装载仍然需要时间。 – Siju