2012-02-03 32 views
8

我正在開發一個簡單的android音頻播放器。我想列出相冊在設備中。在Android上市專輯

我想這個代碼

String where = new String(); 
where = MediaStore.Audio.Media.IS_MUSIC + "=1"; 
private Cursor managedCursor; 
managedCursor = managedQuery(
     MediaStore.Audio.Media.EXTERNAL_CONTENT_URI, 
     new String[] { 
      MediaStore.Audio.Media.TITLE, 
      MediaStore.Audio.Media._ID, 
      MediaStore.Audio.Media.ALBUM,  
      MediaStore.Audio.Media.ALBUM_ID,  
      MediaStore.Audio.Media.ARTIST, 
      MediaStore.Audio.Media.ARTIST_ID 
     }, 
     where,         
     null,          
     MediaStore.Audio.Media.DEFAULT_SORT_ORDER 
    ); 

    ListAdapter adapter = new AlbumListAdapter(
     this,         
     R.layout.albumlist_item,     
     managedCursor,       
     new String[] {       
      MediaStore.Audio.Media.ALBUM,  
      MediaStore.Audio.Media.ARTIST   
     }, 
     new int[] {        
      R.id.text_album, 
      R.id.text_artist 
     } 
    ); 
    setListAdapter(adapter); 

但這些代碼是表中的所有歌曲的設備中。

Android Media商店數據庫的結構如何?

任何人請幫助。

回答

6

你應該查詢相冊這樣

String[] projection = new String[] { Albums._ID, Albums.ALBUM, Albums.ARTIST, Albums.ALBUM_ART, Albums.NUMBER_OF_SONGS }; 
String selection = null; 
String[] selectionArgs = null; 
String sortOrder = Media.ALBUM + " ASC"; 
Cursor cursor = contentResolver.query(Albums.EXTERNAL_CONTENT_URI, projection, selection, selectionArgs, sortOrder); 

http://developer.android.com/reference/android/provider/MediaStore.Audio.Albums.html

藝術家,播放列表和流派都可以在使用正確的EXTERNAL_CONTENT_URI和相應的投影類似的方式進行查詢。

希望幫助...

+0

究竟是什麼 「ASC」 的名單呢?它確實改變了我的媒體列表的順序,但我不明白它在做什麼 – Zen 2014-03-21 21:05:55

+1

ASC按升序排列結果集。在這個例子中,它將按專輯名稱的升序排列列表。所以按字母順序排列的A,B,C等......與之相反的是DESC降序 – JeffG 2014-03-24 10:30:00

+0

很好用。但它會分別安排以小寫字母和大寫字母開頭的音樂文件。所以在排序前將所有媒體文件轉換爲小寫:) – Zen 2014-03-24 10:37:48

1

我的人是否已經被添加到我的地圖

public Map<String, String> getAlbumList(Context c) { 
    //setup map and cursor 
    Map<String, String> result = new HashMap<String, String>(); 
    String selection = MediaStore.Audio.Media.IS_MUSIC + " !=0"; 
    final Cursor mCursor = c.getContentResolver().query(
      MediaStore.Audio.Media.EXTERNAL_CONTENT_URI, 
      new String[] {MediaStore.Audio.Media.ALBUM, 
        MediaStore.Audio.Media.ARTIST, 
        MediaStore.Audio.Media.ALBUM_ID,}, selection, null, 
        "LOWER ("+MediaStore.Audio.Media.ALBUM + ") ASC"); 

    int count = mCursor.getCount(); 


    String[] mArtist = new String[count]; 
    String[] mAlbum = new String[count]; 
    String[] AlbumID = new String[count]; 

    int i = 0; 
    int j = 0; 
    if (mCursor.moveToFirst()) { 

     do { 
      mAlbum[i] = mCursor 
        .getString(mCursor 
          .getColumnIndexOrThrow(MediaStore.Audio.Media.ALBUM)); 
      mArtist[i] = mCursor.getString(mCursor 
        .getColumnIndexOrThrow(MediaStore.Audio.Media.ARTIST)); 

      AlbumID[i] = Long.toString(mCursor 
        .getLong(mCursor 
          .getColumnIndexOrThrow(MediaStore.Audio.Media.ALBUM_ID))); 

            //checking for same previous value 
      if(result.containsValue(mAlbum[i])){ 

      }else{ 
      result.put("artist" + j, mArtist[i]); 
      result.put("album" + j, mAlbum[i]); 
      result.put("AlbumID" + j, AlbumID[i]); 
      j = j + 1; 
      } 
      i = i + 1; 

     } while (mCursor.moveToNext()); 
    } 

    result.put("count", Integer.toString(j)); 
    mCursor.close(); 
    return result; 
} 
} 

也許不是最漂亮的解決了專輯的唯一排序檢查排序的唯一專輯.. 。但它的工作原理完全按預期沒有摸索周圍使用SQLite ....

我傳遞在這裏的上下文,因爲我在沒有活動的情況下getContentResolver自定義適配器片段用一個ListView()沒有按沒有工作....

+0

作品像一個魅力 – Learner 2016-08-26 14:30:50

3

使用這個簡化的代碼來獲取專輯

public ArrayList<AlbumModel> getListOfAlbums(Context context) { 

      String where = null; 

      final Uri uri = MediaStore.Audio.Albums.EXTERNAL_CONTENT_URI; 
      final String _id = MediaStore.Audio.Albums._ID; 
      final String album_name = MediaStore.Audio.Albums.ALBUM; 
      final String artist = MediaStore.Audio.Albums.ARTIST; 
      final String albumart = MediaStore.Audio.Albums.ALBUM_ART; 
      final String tracks = MediaStore.Audio.Albums.NUMBER_OF_SONGS; 

      final String[] columns = { _id, album_name, artist, albumart, tracks }; 
      Cursor cursor = context.getContentResolver().query(uri, columns, where, 
        null, null); 

      ArrayList<AlbumModel> list = new ArrayList<AlbumModel>(); 

      // add playlsit to list 

      if (cursor.moveToFirst()) { 

       do { 

        AlbumModel albumData = new AlbumModel(); 

        albumData 
          .setAlbumID(cursor.getLong(cursor.getColumnIndex(_id))); 

        albumData.setAlbumName(cursor.getString(cursor 
          .getColumnIndex(album_name))); 

        albumData.setALbumArtist(cursor.getString(cursor 
          .getColumnIndex(artist))); 

        albumData.setAlbumArt(cursor.getString(cursor 
          .getColumnIndex(albumart))); 

        albumData.setTracks(cursor.getString(cursor 
          .getColumnIndex(tracks))); 

        list.add(albumData); 

       } while (cursor.moveToNext()); 
      } 

      cursor.close(); 

      return list; 
     } 
2
public class Album { 

private long id; 
private String albumName; 
private String artistName; 
private int nr_of_songs; 
private Bitmap albumImg; 

public Album(long id, String albumName, String artistName, Bitmap albumImg, int nr_of_songs) { 
    this.albumImg = albumImg; 
    this.id = id; 
    this.albumName = albumName; 
    this.artistName = artistName; 
    this.nr_of_songs = nr_of_songs; 
} 

public void setId(long id) { 
    this.id = id; 
} 
public void setAlbumName(String albumName) { 
    this.albumName = albumName; 
} 
public void setArtistName(String artistName) { 
    this.artistName = artistName; 
} 
public void setAlbumImg(Bitmap albumImg) { 
    this.albumImg = albumImg; 
} 
public void setNr_of_songs(int nr_of_songs) { 
    this.nr_of_songs = nr_of_songs; 
} 

public long getID(){ 
    return id; 
} 
public String getAlbumName(){ 
    return albumName; 
} 
public String getArtistName() { 
    return artistName; 
} 
public Bitmap getAlbumImg() { 
    return albumImg; 
} 
public int getNr_of_songs() { 
    return nr_of_songs; 
} 

} 


public void getAlbumsLists(){ 
    String where = null; 

    final Uri uri = MediaStore.Audio.Albums.EXTERNAL_CONTENT_URI; 
    final String _id = MediaStore.Audio.Albums._ID; 
    final String album_name = MediaStore.Audio.Albums.ALBUM; 
    final String artist = MediaStore.Audio.Albums.ARTIST; 
    final String albumart = MediaStore.Audio.Albums.ALBUM_ART; 
    final String tracks = MediaStore.Audio.Albums.NUMBER_OF_SONGS; 

    final String[] columns = { _id, album_name, artist, albumart, tracks }; 
    Cursor cursor = context.getContentResolver().query(uri, columns, where, null, null); 

    if(cursor!=null && cursor.moveToFirst()){ 

     do { 

      long id = cursor.getLong(cursor.getColumnIndex(_id)); 
      String name = cursor.getString(cursor.getColumnIndex(album_name)); 
      String artist2 = cursor.getString(cursor.getColumnIndex(artist)); 
      String artPath = cursor.getString(cursor.getColumnIndex(albumart)); 
      Bitmap art = BitmapFactory.decodeFile(artPath); 
      int nr =Integer.parseInt(cursor.getString(cursor.getColumnIndex(tracks))); 

      albumList.add(new Album(id, name, artist2, art, nr)); 

     } while (cursor.moveToNext()); 
    } 

    cursor.close(); 
}