Android:最近使用媒体商店添加了歌曲列表

时间:2011-08-19 04:46:57

标签: android

我正在研究简单的音频媒体播放器。我正在使用媒体商店获取存储在SD卡上的所有歌曲的信息。到现在为止还挺好。一切都很好。

但我现在被困住了。如何使用媒体商店获取最近添加的(最近添加的)歌曲?

此致 Niral

3 个答案:

答案 0 :(得分:5)

这是来自Android 2.3中默认音乐播放器的来源

    private void playRecentlyAdded() {
    // do a query for all songs added in the last X weeks
    int X = MusicUtils.getIntPref(this, "numweeks", 2) * (3600 * 24 * 7);
    final String[] ccols = new String[] { MediaStore.Audio.Media._ID};
    String where = MediaStore.MediaColumns.DATE_ADDED + ">" + (System.currentTimeMillis() / 1000 - X);
    Cursor cursor = MusicUtils.query(this, MediaStore.Audio.Media.EXTERNAL_CONTENT_URI,
            ccols, where, null, MediaStore.Audio.Media.DEFAULT_SORT_ORDER);

    if (cursor == null) {
        // Todo: show a message
        return;
    }
    try {
        int len = cursor.getCount();
        long [] list = new long[len];
        for (int i = 0; i < len; i++) {
            cursor.moveToNext();
            list[i] = cursor.getLong(0);
        }
        MusicUtils.playAll(this, list, 0);
    } catch (SQLiteException ex) {
    } finally {
        cursor.close();
    }
}

答案 1 :(得分:1)

我不确定这是否是您正在寻找的,但当我抬头看默认的Android音乐播放器来源时,我发现媒体商店中有一个“最近添加的”播放列表。其在 MediaStore.Audio.Playlists 中的ID为 -1

修改

经过进一步研究,我发现-1只是一个值,表明它在播放列表表中不存在。 您可以改用以下解决方案:

在查询 MediaStore.Audio.Media 时,将其添加到where子句条件中:

MediaStore.Audio.Media.DATE_ADDED + ">" + (System.currentTimeMillis() / 1000 - NUM_OF_DAYS);

NUM_OF_DAYS表示您的音频文件存储在SD卡中的时间。

注意:从 MediaStore.Audio.Media 查询,而不是 MediaStore.Audio.Playlist

答案 2 :(得分:1)

在您维护的自定义列表中添加一个整数字段“dateAdded”并访问该字段

    int dateAddedIndex = internalContentCursor.getColumnIndex(MediaStore.Audio.Media.DATE_ADDED);
    if (dateAddedIndex != -1) {
        songs.setDateAdded(externalContentCursor.getInt(externalContentCursor.getColumnIndex(MediaStore.Audio.Media.DATE_ADDED)));
    }

根据添加的时间对列表进行排序

public static List<Songs> getTopRecentAdded(List<Songs> list) {
            Collections.sort(list, new Comparator<Songs>() {
                @Override
                public int compare(Songs left, Songs right) {
                    return left.getDateAdded() - right.getDateAdded();
                }
            });

            Collections.reverse(list);
            return list;
        }

这将首先返回包含歌曲的列表,该列表最后添加。