2012-10-04 59 views
1

我有興趣對來自特定流派的所有專輯進行查詢。通過使用MediaStore.Audio.Artists.Albums.getContentUri,Android可以輕鬆地爲特定藝術家的專輯執行類似的查詢,但只要查詢的流派不同,MediaStore.Audio.Genres.Members.getContentUri是最好的提供方式,但是這用於從流派返回歌曲。在查詢Genres.Members.EXTERNAL_CONTENT_URI專輯

在執行Genres.Members查詢,然後使用MediaStore.Audio.Genres.Members.ALBUM返回專輯名稱之後,您可以輕鬆地返回每個類型的每個成員的專輯名稱,但是隻有當您顯示歌曲時這一功能纔有用。

是否有某種選擇可以使我只能從一個流派返回相冊,或者我可以使用一個特殊的Uri?我還沒有找到任何文件,所以如果任何人有任何信息,將不勝感激。

回答

7

給你:

{ 
     int genreId = 2; // << Set Your Genre ID Here 
     Uri uri = MediaStore.Audio.Albums.getContentUri("external"); 
     Log.i("XXX", "uri = " + uri.toString()); 
     Cursor cursor = null; 
     try { 

      String selection = "album_info._id IN " 
        + "(SELECT (audio_meta.album_id) album_id FROM audio_meta, audio_genres_map " 
        + "WHERE audio_genres_map.audio_id=audio_meta._id AND audio_genres_map.genre_id=?)"; 
      String[] selectionArgs = new String[] { String.valueOf(genreId) }; 
      String[] proj = { AlbumColumns.ALBUM }; 
      cursor = getContentResolver().query(uri, proj, selection, 
        selectionArgs, null); 
      if (null != cursor) { 
       Log.i("XXX", "cursor rows count = " + cursor.getCount()); 
       while (cursor.moveToNext()) { 
        Log.i("XXX", " Album: " + cursor.getString(0)); 
       } 
       cursor.close(); 
       Log.i("XXX", "cursor closed"); 
      } 
     } catch (Exception ex) { 
      Log.e("XXX", "Error Querying Database"); 
     } finally { 
      if (cursor != null) { 
       cursor.close(); 
      } 
     } 
    } 

編輯
查詢固定指定類型ID

+0

謝謝,RA獲得的所有專輯。我很好奇你是如何得到答案的。你剛熟悉'MediaStore'和SQL嗎?你看過任何文檔嗎? – adneal

+1

這是我與mediastore的第一筆交易,怎麼樣?看看http://grepcode.com/file/repository.grepcode.com/java/ext/com.google.android/android-apps/4.0.1_r1/com/android/providers/media/MediaProvider.java,其餘的很容易。 –

+0

啊,好吧,我明白了。再次感謝。 – adneal