我正在研究简单的音频媒体播放器。我正在使用媒体商店获取存储在SD卡上的所有歌曲的信息。到现在为止还挺好。一切都很好。
但我现在被困住了。如何使用媒体商店获取最近添加的(最近添加的)歌曲?
此致 Niral
答案 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;
}
这将首先返回包含歌曲的列表,该列表最后添加。