Android文件扫描

时间:2017-10-09 11:14:42

标签: java android

我有一个音乐播放器应用程序。我需要扫描手机中的所有音乐文件,但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;
    }
}}

2 个答案:

答案 0 :(得分:0)

与API {21}及更高版本的official android documentation相同:

  

<强> getExternalMediaDirs

     

返回所有应用程序特定目录的绝对路径   应用程序可以放置媒体的共享/外部存储设备   文件。扫描这些文件并将其提供给其他应用程序   通过MediaStore。

使用getExternalMediaDirs代替getExternalStorageDirectory

 getplaylist().getPlayList(Environment.getExternalStorageDirectory().getPath()));

答案 1 :(得分:0)

首先检查外部存储器是否可用于设备。之后,这些是可以访问外部存储器目录的以下方法 -

  1. getExternalStorageDirectory();
  2. getExternalStoragePublicDirectory(String type);
  3. Environment.getExternalStorageDirectory()getAbsolutePath(); 必须包含对清单文件的权限。

    String path = Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_MUSIC).getAbsolutePath();
    

    或 文件路径= getExternalFilesDir(Environment.DIRECTORY_MUSIC);