我有一个音乐播放器应用程序。我需要扫描手机中的所有音乐文件,但Android 5.0和更高版本我无法访问SD卡
manifest.xml中的权限
<uses-permission android:name="android.permission.WRITE_INTERNAL_STORAGE"/>
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
<uses-permission android:name="android.permission.READ_INTERNAL_STORAGE" />
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
5.0版之前这部分工作
ArrayList<HashMap<String, String>> ist=new ArrayList<>(new getplaylist().getPlayList("/"));
此部分仅返回手机存储而非sdcard
ArrayList<HashMap<String, String>> ist=new ArrayList<>(new
getplaylist().getPlayList(Environment.getExternalStorageDirectory()
.getPath()));
播放列表方法
public class getplaylist {
public ArrayList<HashMap<String,String>> getPlayList(String rootPath) {
ArrayList<HashMap<String,String>> fileList = new ArrayList<>();
try {
File rootFolder = new File(rootPath);
File[] files = rootFolder.listFiles();
for (File file : files) {
if (file.isDirectory()) {
if (getPlayList(file.getAbsolutePath()) != null) {
fileList.addAll(getPlayList(file.getAbsolutePath()));
} else {
break;
}
} else if (file.getName().endsWith(".mp3")) {
HashMap<String, String> song = new HashMap<>();
song.put("file_path", file.getAbsolutePath());
song.put("file_name", file.getName());
fileList.add(song);
}
}
return fileList;
} catch (Exception e) {
System.out.print(e.toString());
return null;
}
}}
答案 0 :(得分:0)
与API {21}及更高版本的official android documentation相同:
<强> getExternalMediaDirs 强>
返回所有应用程序特定目录的绝对路径 应用程序可以放置媒体的共享/外部存储设备 文件。扫描这些文件并将其提供给其他应用程序 通过MediaStore。
使用getExternalMediaDirs
代替getExternalStorageDirectory
:
getplaylist().getPlayList(Environment.getExternalStorageDirectory().getPath()));
答案 1 :(得分:0)
首先检查外部存储器是否可用于设备。之后,这些是可以访问外部存储器目录的以下方法 -
Environment.getExternalStorageDirectory()getAbsolutePath(); 必须包含对清单文件的权限。
String path = Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_MUSIC).getAbsolutePath();
或 文件路径= getExternalFilesDir(Environment.DIRECTORY_MUSIC);