我使用Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_MUSIC)方法来获取我的安卓设备保存音乐的默认目录。
此方法返回的目录存在(类似于sdcard/ music ),但没有任何音乐文件。当我检查我的SD卡时,我发现所有的音乐文件都存储在由我的一个应用程序( sdcard /qqmusic/song)命名的另一个目录中,这个目录无法使用getExternalStoragePublicDirectory方法找到。
在这种情况下(不同的设备存储音乐在不同的位置),有没有好的方法来获取路径,而不考虑设备之间的差异?
发布于 2013-03-19 10:59:48
正如我们在评论中所讨论的,我将展示Android音乐应用程序如何找到所有的音乐文件。
Android Music应用程序只需查询MediaProvider即可获得外部存储(即SD卡)上的所有音乐。
数据库由MediaScannerService填充。MediaScannerService调用MediaScanner.scanDirectories来搜索这些目录下的所有文件。如果是音频文件,则取元数据并放入数据库(MediaProvider)。
if (MediaProvider.INTERNAL_VOLUME.equals(volume)) {
// scan internal media storage
directories = new String[] {
Environment.getRootDirectory() + "/media",
};
}else if (MediaProvider.EXTERNAL_VOLUME.equals(volume)) {
// scan external storage volumes
directories = mExternalStoragePaths;
}
if (directories != null) {
scan(directories, volume);
}所以我的回答是MediaProvider已经包含了外部存储上的音乐文件,所以你可以直接查询提供商来获得所有的音乐文件。
首先检查MediaStore。
您可以使用以下代码来获取所有音乐文件。
//Some audio may be explicitly marked as not being music
String selection = MediaStore.Audio.Media.IS_MUSIC + " != 0";
String[] projection = {
MediaStore.Audio.Media._ID,
MediaStore.Audio.Media.ARTIST,
MediaStore.Audio.Media.TITLE,
MediaStore.Audio.Media.DATA,
MediaStore.Audio.Media.DISPLAY_NAME,
MediaStore.Audio.Media.DURATION
};
cursor = this.managedQuery(
MediaStore.Audio.Media.EXTERNAL_CONTENT_URI,
projection,
selection,
null,
null);
private List<String> songs = new ArrayList<String>();
while(cursor.moveToNext()){
songs.add(cursor.getString(0) + "||" + cursor.getString(1) + "||" + cursor.getString(2) + "||" + cursor.getString(3) + "||" + cursor.getString(4) + "||" + cursor.getString(5));
}MediaStore.Audio.Media.DATA列包含该音乐文件的完整路径。
https://stackoverflow.com/questions/15457470
复制相似问题