這並不是你想要做的事情,我想你想做的事情。如果是這樣,你可以通過點擊媒體表格(媒體)來獲得藝術家的所有專輯 - 而不是專輯藝術家。 EXTERNAL_CONTENT_URI)爲不同的Media.ALBUM與Media.ARTIST_ID在你的where子句中。這將適用於任何Android版本。
但是...如果你想用專輯的藝術家合作......
2.3.3之前的專輯藝術家MP3標籤被忽略,而不是在媒體存儲器架構。它現在就在那裏 - 例如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;
}
你可以做一個選擇了不同的ID來獲得專輯藝術家列表像這樣的東西:
cur = getContentResolver().query(Albums.EXTERNAL_CONTENT_URI, new String[]{"distinct album_artist_id", "album_artist"}, null, null, "album_artist collate nocase");
需要注意的是,因爲列沒有記錄並且常量不可用,所以您必須編寫自己的常量或對字符串進行硬編碼。你大概可以從那裏弄清楚其餘的。
謝謝,你第一次是對的,我希望所有包含ARTIST至少一首歌的所有專輯,而不是專輯封面,我知道它是獨立的。另外,理想情況下,我想返回一個可以傳遞給ListView的遊標,因此它需要包含一個_ID,這就排除了使用distinct。 我還擔心使用DISTINCT,因爲它假設內容提供者是由SQL數據庫支持的,而這可能不是將來的情況(這有點「hacky」)。我想知道MediaStore.Audio.Artists.Albums如何被查詢,我認爲這是可能的,否則爲什麼它會在文檔中? – Fraser
有一個Media.ALBUM_ID可用於我的答案的前半部分。我不會擔心使用'獨特'。 SQLite不會很快消失。 – Earl
優秀點,這是有道理的。謝謝! – Fraser