安卓系统在开机的时候就会自动检测SD卡的文件,并将音乐文件搜集生成一个数据库文件。我们只需访问数据库表中的信息就能得到所需的文件
代码如下
// 获取所有歌曲
Cursor cursor = cr.query(
MediaStore.Audio.Media.EXTERNAL_CONTENT_URI, null, null,
null, MediaStore.Audio.Media.DEFAULT_SORT_ORDER);
得到cursor对象就能访问cursor里的媒体资源
if (cursor.moveToFirst()) { do { String title = cursor.getString(cursor .getColumnIndex(MediaStore.Audio.Media.TITLE)); String singer = cursor.getString(cursor .getColumnIndex(MediaStore.Audio.Media.ARTIST)); String album = cursor.getString(cursor .getColumnIndex(MediaStore.Audio.Media.ALBUM)); long size = cursor.getLong(cursor .getColumnIndex(MediaStore.Audio.Media.SIZE)); long time = cursor.getLong(cursor .getColumnIndex(MediaStore.Audio.Media.DURATION)); String url = cursor.getString(cursor .getColumnIndex(MediaStore.Audio.Media.DATA)); int _id = cursor.getInt(cursor .getColumnIndex(MediaStore.Audio.Media._ID)); String name = cursor.getString(cursor .getColumnIndex(MediaStore.Audio.Media.DISPLAY_NAME)); String sbr = name.substring(name.length() - 3, name.length()); } while (cursor.moveToNext());
但是如果你的手机在开机后又下载了新的歌曲文件通过上面的方法是访问不到的,因为它还没有被加到数据表中,这样我们就要重写文件搜索的方法。
//获取该路径下的所有文件 public static List<String> getAllFile(String path){ List<String> fileList = new ArrayList<String>(); File folder = new File(path); addFile(fileList, folder); return fileList; } public static void addFile(List<String> fileList,File f){ if(f.isDirectory()){ File[] files = f.listFiles(); for(File f1 : files){ addFile(fileList, f1); } }else{ String filename = f.getName(); if(filename.length()>4&&filename.substring(filename.length()-4).equalsIgnoreCase(".mp3")){ fileList.add(f.getAbsolutePath()); } } }
我们只需在需要的地方调用getAllFile(Environment.getExternalStorageDirectory().getAbsolutePath());