Androidでストレージの中から特定の拡張子だけを検索してリストに表示したい
Androidで、ストレージ内の特定の拡張子をListに追加して、リストに表示するようにしたいです。
再帰の時、一つ上のディレクトリではなく、/sdcardを終了してしまいます。
何故でしょうか?
MainActivity.java
public class MainActivity extends AppCompatActivity {
private String sdPath = getExternalStoragePath();
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
new MyAsyncTask(this).execute(new File(sdPath));
}
// 外部ストレージ(SDカード)のパスを取得する。
public static String getExternalStoragePath() {
String path;
// MOTOROLA 対応
path = System.getenv("EXTERNAL_ALT_STORAGE");
if (path != null) {
return path;
}
// Samsung 対応
path = System.getenv("EXTERNAL_STORAGE2");
if (path != null) {
return path;
}
// 旧 Samsung + 標準 対応
path = System.getenv("EXTERNAL_STORAGE");
if (path == null) {
path = Environment.getExternalStorageDirectory().getPath();
}
// HTC 対応
File file = new File(path + "/ext_sd");
if (file.exists()) {
path = file.getPath();
}
// その他機種
return path;
}
}
MyAsyncTask.java
public class MyAsyncTask extends AsyncTask<File, Void, String> {
Context context;
private File[] files;
private List<String> pickedFileList = new ArrayList<String>();
private ListView lv;
public MyAsyncTask(Context context) {
this.context = context;
}
@Override
protected String doInBackground(File... params) {
pickOnDir(params[0]);
return "hoge";
}
public void pickOnDir(File dir) {
files = dir.listFiles();
if (files != null) {
Log.d("file Info", dir.getAbsolutePath() + "を検索中...");
for (int i = 0; i < files.length; i++) {
if (files[i].isDirectory()) {
Log.d("file Info", files[i].getAbsolutePath() + "にフォルダを確認しました");
pickOnDir(files[i]);
}else if (files[i].isFile()) {
if (files[i].getName().endsWith(".js")) {
Log.d("file Info", files[i].getAbsolutePath() + "にJSファイルを確認しました");
pickedFileList.add(files[i].getAbsolutePath());
} else {
Log.d("file Info", files[i].getAbsolutePath() + "にファイルを確認しました");
}
} else {
Log.d("file Info", files[i].getAbsolutePath() + "は不明なファイルです");
}
}
Log.d("file Info", dir.getAbsolutePath() + "の検索を完了したので戻ります");
return;
}
}
@Override
protected void onPostExecute(String results) {
lv = (ListView) ((Activity) this.context).findViewById(R.id.listView);
ArrayAdapter<String> adapter = new ArrayAdapter<String>(this.context, android.R.layout.simple_expandable_list_item_1, pickedFileList);
lv.setAdapter(adapter);
}
}
ログ
/sdcardを検索中...
/sdcard/DCIMにフォルダを確認しました
/sdcard/DCIM/Cameraにフォルダを確認しました
/sdcard/DCIM/Cameraを検索中...
/sdcard/DCIM/Camera/XXX.jpgにファイルを確認しました
/sdcardの検索を完了したので戻ります