2015-11-05 9 views
0

Как я могу получить «обложки» (так что песни в одном альбоме имеют одинаковую обложку)?Как получить обложку альбома, запрашивая песни

// Retrieve song info from device 
public void getSongList() { 
    String selection = MediaStore.Audio.Media.IS_MUSIC + " != 0"; 

    // Query external audio 
    ContentResolver musicResolver = getActivity().getContentResolver(); 
    Uri musicUri = android.provider.MediaStore.Audio.Media.EXTERNAL_CONTENT_URI; 
    Cursor musicCursor = musicResolver.query(musicUri, null, selection, null, null); 

    // Iterate over results if valid 
    if (musicCursor != null && musicCursor.moveToFirst()) { 
     // Get columns 
     int titleColumn = musicCursor.getColumnIndex 
       (android.provider.MediaStore.Audio.Media.TITLE); 
     int idColumn = musicCursor.getColumnIndex 
       (android.provider.MediaStore.Audio.Media._ID); 
     int artistColumn = musicCursor.getColumnIndex 
       (android.provider.MediaStore.Audio.Media.ARTIST); 
     int durationColumn = musicCursor.getColumnIndex 
       (MediaStore.Audio.Media.DURATION); 

     // Add songs to list 
     do { 
      long thisId = musicCursor.getLong(idColumn); 
      String thisTitle = musicCursor.getString(titleColumn); 
      String thisArtist = musicCursor.getString(artistColumn); 
      long thisDuration = musicCursor.getLong(durationColumn); 

      String thisPathAlbumImage = ???? 
      //**** HERE I WANT A PATH/URI WITH ALBUM SONG **** 

      arrayOfSongs.add(new Song(thisId, thisTitle, thisArtist, thisDuration, thisPathAlbumImage)); 

      Log.d(LOG_TAG, "New song added: " + thisTitle); 
     } 
     while (musicCursor.moveToNext()); 
    } 
} 

Мне нужен еще один запрос? Мне не нужен запрос обо всех альбомах, я не знаю, как соединить песни с альбомами ...

ответ

1

Вам нужно включить идентификатор альбома в свой запрос выше.

int albumIdColumn = musicCursor.getColumnIndex 
      (MediaStore.Audio.Media.ALBUM_ID); 

long albumId = musicCursor.getLong(albumIdColumn); 

С альбомом идентификатором вы можете запросить по пути крышки, как это:

private static String getCoverArtPath(long albumId, Context context) { 
    Cursor albumCursor = context.getContentResolver().query(
      MediaStore.Audio.Albums.EXTERNAL_CONTENT_URI, 
      new String[]{MediaStore.Audio.Albums.ALBUM_ART}, 
      MediaStore.Audio.Albums._ID + " = ?", 
      new String[]{Long.toString(albumId)}, 
      null 
    ); 
    boolean queryResult = albumCursor.moveToFirst(); 
    String result = null; 
    if (queryResult) { 
     result = albumCursor.getString(0); 
    } 
    albumCursor.close(); 
    return result; 
} 

 Смежные вопросы

  • Нет связанных вопросов^_^