Android:如何列出专辑

时间:2014-11-30 12:08:34

标签: android mediastore

我想尝试开发简单的Android音乐播放器。 我有以下方法列出专辑标题,但它提供了重复的专辑列表。

    public void getAlbumList() {
    //query external audio
    Activity a=getActivity();
    ContentResolver musicResolver = a.getContentResolver();
    Uri musicUri = android.provider.MediaStore.Audio.Media.EXTERNAL_CONTENT_URI;
    //String[] projection = null;

    //String sortOrder = null;

    String selectionMimeType = MediaStore.Files.FileColumns.MIME_TYPE + "=?";

    String mimeType = MimeTypeMap.getSingleton().getMimeTypeFromExtension("mp3"); 

    String[] selectionArgsMp3 = new String[]{ mimeType };
    Cursor musicCursor = musicResolver.query(musicUri, null, selectionMimeType, selectionArgsMp3, null);
    //iterate over results if valid

    if(musicCursor!=null && musicCursor.moveToFirst()){
        //get columns
        int atitleColumn = musicCursor.getColumnIndex
                (android.provider.MediaStore.Audio.Media.ALBUM);
        int idColumn = musicCursor.getColumnIndex
                (android.provider.MediaStore.Audio.Media.ALBUM_ID);
        //int bitmap = musicCursor.getColumnIndex
            //  (android.provider.MediaStore.Audio.Albums.ALBUM_ART);
        //add songs to list
        while (musicCursor.moveToNext()){
            long thisId = musicCursor.getLong(idColumn);
            String thisaTitle = musicCursor.getString(atitleColumn);

            albumList.add(new Album(thisId, thisaTitle));
        } 

    }
}

我尝试了How to use MediaStore query to get Artists without duplicates?,但它不起作用。

提前致谢。

1 个答案:

答案 0 :(得分:0)

将此添加到您的相册类

@Override
public boolean equals(Object obj) {
    if (obj instanceof Album) {
        Album album = (Album) obj;
        //here we compare if the 2 album objects are same or not (edit code as needed)
        return (album.getaTitle().equals(this.aTitle) && album.getId == this.Id);
    } else {
        return false;
    }
}

@Override
public int hashCode() {
    int hashcode = 0;
    hashcode = this.Id*20;
    hashcode += this.aTitle.hashCode();
    //here we generate the album object hashcode using Id and artistname 
    return hashcode;
}
然后,不要将对象添加到列表中,而是使用:

HashSet<Album> albumList = new HashSet<Album>();
albumList.add(new Album(thisId, thisaTitle));
//use simple for each loop to iterate
for(Album album:albumList){
            System.out.println(album);
        }

散列集按照主题处理重复