2017-10-09 173 views
1

我有一个音乐播放器应用程序。我需要扫描所有音乐文件这是在手机,但Android 5.0及更高版本我无法访问SD卡中的manifest.xmlAndroid文件扫描

权限

<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("/")); 

这部分收益仅手机存储SD卡不

 ArrayList<HashMap<String, String>> ist=new ArrayList<>(new 
     getplaylist().getPlayList(Environment.getExternalStorageDirectory() 
     .getPath())); 

播放甲基OD

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; 
    } 
}} 
+1

不要这样做。查询所有音频文件的'MediaStore'。此外,没有'WRITE_INTERNAL_STORAGE'或'READ_INTERNAL_STORAGE'权限。 – CommonsWare

回答

0

喜欢official android documentation说,对API级21及以上:

getExternalMediaDirs应用特定目录

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

使用getExternalMediaDirs代替getExternalStorageDirectory中:

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

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

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

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

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