我想要实现的是在数组列表中获取所有 mp3 文件的 URL 和标题以返回它。全部来自文件夹:/ext_card/Music/ 和所有子文件夹。
我探索的选项似乎都卡住了,我在互联网上查找的所有答案都指向 mediastore,但我不知道如何使用它
并且不要给我 RTFM 废话,因为我为 mediastore 找到的解释充其量是迟钝的。
所以任何人都可以请帮助我或给我一个简单的工作媒体存储查询所有 mp3 文件的例子吗?
我想要实现的是在数组列表中获取所有 mp3 文件的 URL 和标题以返回它。全部来自文件夹:/ext_card/Music/ 和所有子文件夹。
我探索的选项似乎都卡住了,我在互联网上查找的所有答案都指向 mediastore,但我不知道如何使用它
并且不要给我 RTFM 废话,因为我为 mediastore 找到的解释充其量是迟钝的。
所以任何人都可以请帮助我或给我一个简单的工作媒体存储查询所有 mp3 文件的例子吗?
使用它可以帮助您从 SD 卡中获取所有 MP3 歌曲
private static ArrayList<genericSongClass> songs = null;
public void BindAllSongs() {
/** Making custom drawable */
String selection = MediaStore.Audio.Media.IS_MUSIC + " != 0";
final String[] projection = new String[] {
MediaStore.Audio.Media.DISPLAY_NAME,
MediaStore.Audio.Media.ARTIST,
MediaStore.Audio.Media.DATA};
final String sortOrder = MediaStore.Audio.AudioColumns.TITLE
+ " COLLATE LOCALIZED ASC";
try {
// the uri of the table that we want to query
Uri uri = android.provider.MediaStore.Audio.Media.EXTERNAL_CONTENT_URI;
// query the db
cursor = getBaseContext().getContentResolver().query(uri,
projection, selection, null, sortOrder);
if (cursor != null) {
songs = new ArrayList<genericSongClass>(cursor.getCount());
cursor.moveToFirst();
while (!cursor.isAfterLast()) {
GSC = new genericSongClass();
GSC.songTitle = cursor.getString(0);
GSC.songArtist = cursor.getString(1);
GSC.songData = cursor.getString(2);
songs.add(GSC);
cursor.moveToNext();
}
}
} catch (Exception ex) {
} finally {
if (cursor != null) {
cursor.close();
}
}
}
public class genericSongClass {
String songTitle = "";
String songArtist = "";
String songData = "";
String isChecked = "false";
}
这是一种递归方式来做这样的事情,
getMp3s(Arraylist<File> list, File dir){
File[] files = dir.listFiles();
for(File file : files){
if(file.isDirectory()){
getMp3s(list, file);
}else{
//add mp3s to list here
}
}
}