Android: запрос MediaStore.Audio.Artists.Albums - PullRequest
2 голосов
/ 17 августа 2011

В настоящее время я успешно запрашиваю MediaStore.Audio.Artists.EXTERNAL_CONTENT_URI через обычный ContentResolver и получаю ожидаемые результаты.В документах говорится, что есть вложенный класс MediaStore.Audio.Artists.Albums, который является подкаталогом, содержащим каждый альбом для каждого исполнителя, однако он не имеет эквивалентного EXTERNAL_CONTENT_URI.Как я могу запросить это?

Или, в более общем смысле, для данного исполнителя, как мне перечислить каждый альбом, содержащий песню этого исполнителя?В настоящее время я делаю это путем исчерпывающего поиска в MediaStore.Audio.Media в поисках исполнителя и записи каждого альбома в HashMap, но это кажется неправильным и неэффективным.Есть ли более эффективный способ непосредственного использования ContentProviders?

Ответы [ 2 ]

2 голосов
/ 17 августа 2011

Это не совсем то, что вы хотите делать, я думаю, что вы хотите сделать. Если это так, вы можете получить все альбомы для исполнителя, а не исполнителя альбома, нажав таблицу Media (Media.EXTERNAL_CONTENT_URI ) для отдельного Media.ALBUM с Media.ARTIST_ID в предложении where. Это будет работать в любой версии Android.

Однако ... если вы хотите работать с исполнителями альбомов ...

До 2.3.3 метка MP3 «Исполнитель альбома» игнорировалась и отсутствует в схеме Media Store. Он сейчас там - например, у CyanogenMod - но он еще не задокументирован. Если вы планируете опубликовать свой код, вам нужно либо протестировать его и обойти, если он отсутствует, либо ограничить свой код версиями Android, которые его имеют. В противном случае вы застряли в базе данных исполнителей, которая представляет каждого исполнителя на каждом треке, что, вероятно, не то, что вам нужно, если вы думаете об альбомах.

Вот мой тест в моем коде:

Cursor cur = getContentResolver().query(Albums.EXTERNAL_CONTENT_URI, null, null, null, null);
if ((cur.getColumnIndex("album_artist") == -1) || (cur.getColumnIndex("album_artist_id") == -1))
{
    showartist = false;
}
else
{
    showartist = true;
}

Вы можете сделать выбор для разных идентификаторов, чтобы получить список исполнителей альбома с чем-то вроде этого:

cur = getContentResolver().query(Albums.EXTERNAL_CONTENT_URI, new String[]{"distinct album_artist_id", "album_artist"}, null, null, "album_artist collate nocase");

Обратите внимание: поскольку столбцы не задокументированы, а константы недоступны, вам придется создавать свои собственные константы или жестко кодировать строки. Вы можете, вероятно, выяснить остальное.

0 голосов
/ 01 августа 2012

Ури: MediaStore.Audio.Artists.Albums.getContentUri ("external",); работал на меня.

...