2017-10-09 208 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);