0

我正在尝试为我的闹钟应用程序设置铃声。为此,我需要显示 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"));
        }
    }
}
4

3 回答 3

1

首先,不要硬编码/sdcard/,因为 SD 卡可能未安装在该目录下。请改用Environment.getExternalStorageDirectory()- 方法。另外,请先检查是否有 SD 卡。


您无需遍历所有这些文件夹即可获取设备上的每个音频文件(外部内部)。Android 公开了以下MediaStore内容:

[...] 包含内部和外部存储设备上所有可用媒体的元数据。

它有一个MediaStore.Audio用于所有音频特定操作的子类。

于 2012-08-10T09:29:22.417 回答
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
        }
    }
}
于 2012-08-10T09:37:18.937 回答
0

MediaStore比扫描 sdcard 更好,因此您可以获得、、、AlbumsArtistPath尽力而为:)

于 2012-08-10T10:02:15.330 回答