2012-08-10 77 views
0

我試圖爲我的鬧鐘應用程序設置鈴聲。爲此,我需要在SD卡中的各種文件夾和子文件夾中顯示帶有.mp3擴展名的所有歌曲。顯示SD卡中存在的所有文件夾和子文件夾的MP3文件

我只想要顯示.mp3文件,而不是任何文件夾/子文件夾。我已經有了一個編碼,用於從SD卡中顯示歌曲,而不是從子文件夾中顯示歌曲。所有編碼都只能從我不需要的特定文件夾中檢索歌曲。我需要sd卡中存在的每首mp3歌曲。

public class Mp3filterActivity extends Activity{ 
    final String MEDIA_PATH = new String("/sdcard/"); 

    public void onCreate(Bundle savedInstanceState){ 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.main); 
     ListView listsong =(ListView)findViewById(R.id.songlist); 

     ArrayList<String> mp3list = new ArrayList<String>(); 
     mp3list=mp3select(); 
     Toast.makeText(this, "mp3files" +mp3list, Toast.LENGTH_LONG).show(); 

     ArrayAdapter<String> listAdapter=new ArrayAdapter<String>(Mp3filterActivity.this,android.R.layout.simple_list_item_1,mp3list); 
     listsong.setAdapter(listAdapter); 

    } 

    public ArrayList<String> mp3select(){ 
     File home = new File(MEDIA_PATH); 
     ArrayList<String> list = new ArrayList<String>(); 
     //if (home.isDirectory()) 

     if (home.listFiles(new FileExtensionFilter()).length > 0) 
     { 
      for (File file : home.listFiles(new FileExtensionFilter())) 
      { 
        list.add(file.getName().substring(0, (file.getName().length() - 4)));   
       } 
     } 
     return list; 
    } 

    class FileExtensionFilter implements FilenameFilter 
    { 
     public boolean accept(File dir, String name) { 
      return (name.endsWith(".mp3") ||name.endsWith(".MP3")); 
     } 
    } 
} 
+0

@ user147969老兄你真正需要學習的基本知識作爲你的問題'如何添加getMp3()方法「我建議你參考以下基本教程。[鏈接] http://androidsamples.blogspot.in/2009/06/displaying-list-of -music-files-stored.html – 2014-04-06 16:56:01

回答

1

首先,不要硬編碼/sdcard/,因爲SDcard可能沒有安裝在該目錄下。改爲使用Environment.getExternalStorageDirectory()-method。另外,請先檢查是否有SD卡。


你並不需要在所有這些文件夾爬來獲得設備(外部內部)上的每個音頻文件。 Android公開MediaStore其中:

包含內部和外部存儲設備上所有可用介質的元數據。

它有一個MediaStore.Audio子類用於所有音頻特定的操作。

+0

先生對不起,請幫我們提供代碼 – user1479469 2012-08-10 10:06:31

+0

@ user1479469 nope。 [RTFM](http://developer.android.com/guide/topics/providers/content-providers.html)。 – 2012-08-10 10:09:53

0

您必須遞歸遍歷每個文件夾才能實現。

的樣本代碼如下所示:

getMp3s(Arraylist<File> list, File dir){ 
    File[] files = dir.listFiles(); 
    for(File file : files){ 
     if(file.isDirectory()){ 
      getMp3s(list, file); 
     }else{ 
      //add mp3s to list here 
     } 
    } 
} 
+0

先生在這裏我必須添加getMp3()作爲一個單獨的功能? – user1479469 2012-08-10 10:07:33

0

MediaStore是比掃描SD卡更好,因此你可以得到的,AlbumsArtistPath等,儘量做到一切順利:)

相關問題