ちょっと前に知り合いがAndroidはどっから音楽ファイルを持ってくるかわからない!とつぶやいていたので、
SDカードから音楽ファイルを全部引っこ抜いてくる方法を考えました。
まずはSDカードへのアクセス。
File file = Environment.getExternalStorageDirectory();
これでSDカードのルートディレクトリに入れるので、後は下層のディレクトリとファイルをしらみつぶしに検索していきます。
public class SDCS extends Activity {
/** Called when the activity is first created. */
private List<File> musicFiles;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
musicFiles = new ArrayList<File>();
File file = Environment.getExternalStorageDirectory();//SDカードにアクセス
searchMusicFiles(file);
ArrayAdapter<String> adapter
= new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1);
for(File f : musicFiles){
adapter.add(f.getName());
}
ListView listView = (ListView) findViewById(R.id.listview);
listView.setAdapter(adapter);
}
//再帰的にディレクトリ内を調べるメソッド
private void searchMusicFiles(File f){
if(f.isDirectory()){ // ディレクトリならそれ以下のディレクトリ、ファイルを検査
File[] files = f.listFiles();
for(File file : files){
searchMusicFiles(file); // 再帰
}
}else{ // ファイルの場合は音楽ファイルかどうかの判断
// Androidで扱えるのはmp3とwavファイルなので、
// これらのファイルの場合リストに保存
if(f.getName().endsWith("mp3") || f.getName().endsWith("MP3")
|| f.getName().endsWith("wav") || f.getName().endsWith("WAV")){
musicFiles.add(f);
}
}
}
}
これでSDカードに入っている音楽ファイルを無差別に引っこ抜いてこれます。
ファイルの拡張子さえ変えれば任意の種類のファイルも持ってこれます(画像とか)
このままだと拡張子が一致するもの全て持ってくるのでなにかフィルターをかけたい場合は
別に処理が必要です。
