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

MediaStoreSDカードをスキャンするよりも優れているため、、、などを取得できます。Albums最善を尽くしてください:)ArtistPath

于 2012-08-10T10:02:15.330 に答える
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 に答える