这个问题有两个部分
第一
我从手机存储中读取了多个mp3文件(几百个)并将它们保存在我制作的Song类的ArrayList中
class Song
{
String name, path, album, artist, duration;
Bitmap cover;
}
我一直没有记忆,所以我应该如何保存?
第二
读取文件非常慢,我很有用#
File directory = new File("/storage/3666-6134/Music");
File[] files = directory.listFiles();
for (File file : files)
{
Song temp = new Song(file.getAbsolutePath());
songs.add(temp);
}
我猜想有更快和/或更好的方法来做到这一点
谢谢
编辑: 似乎缓慢也来自MediaMetadataRetriever setDataSource 是否有更快的交替?
答案 0 :(得分:0)
为什么要在ArrayList中添加它?它是用于游戏目的吗?如果是,那么只需保存ArrayList中的路径,然后在需要播放或显示它时执行您需要执行的操作。
答案 1 :(得分:0)
我已将ContentResolver用于我的音乐应用程序。
首先,您必须通过游标获取MediaStore之后已经存储的数据并通过游标迭代游标,因此最后您的代码将如下所示:< / p>
ContentResolver musicResolver = getContentResolver();
Uri musicUri = android.provider.MediaStore.Audio.Media.EXTERNAL_CONTENT_URI;
Cursor musicCursor = musicResolver.query(musicUri, null, null, null, null);
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);
//add songs to list
do {
long thisId = musicCursor.getLong(idColumn);
String thisTitle = musicCursor.getString(titleColumn);
String thisArtist = musicCursor.getString(artistColumn);
songList.add(new Song(thisId, thisTitle, thisArtist));
}
while (musicCursor.moveToNext());
}
您甚至可以从here
的音乐播放器创建标准代码