備忘録 〜プログラミング〜

プログラミングに関する事をつらつらと、、

Androidでmkdirを実行してみる

プログラミング内でフォルダを作りたいと思ったときに少しハマったのでメモ。
まず、最初はこんな感じでフォルダを作ろうとしていました

File dir = new File("/storage/sdcard1/{プロジェクトパッケージ}/{フォルダ名}");
if(!dir.exists()){
  boolean result = dir.mkdirs();
  if(result){
    System.out.println("Success");
  }
}

しかし、これでは作れません。
どうやら、Android4.4から外部ストレージ関連の仕様が変更になったようで、アプリからのSDカードへの書き込みは、アプリ固有ディレクトリ配下に限定されたようです。
では、そのアプリ固有ディレクトリとは、、こちら。

/storage/sdcard/Android/data/{プロジェクトパッケージ}

Android/data/{プロジェクトパッケージ}が、アプリ固有領域になるようです。
という事で、このアプリ固有領域以下になら、mkdirs();でフォルダを作成する事が出来ました。
ちなみに、mkdirsは、親ディレクトリがなかった場合、親ディレクトリも作成してくれます。

ex )Testというフォルダがなくても、mkdirsなら、Testフォルダを作って、その中にTest2フォルダを作ってくれる

File dir = new File("/storage/sdcard1/{プロジェクトパッケージ}/Test/Test2");
if(!dir.exists()){
  dir.mkdirs();
}

SDカードのパスに関しては、機種依存があるので、4.4以上であれば、

context.getExternalFilesDirs() 

で取得するのが良いと思うのですが、lavie tab sでは、内部ストレージのみしか取得は出来なかったので、使用出来ない機種もまだあるのかもしれないですね、、
あとは、念のため、マニフェスト

<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE">

を追記しておいたほうがいいでしょう。
これが非常に参考になりました。
やっぱり、SDカード周りは難しいです、、、

Android 4.4におけるSDカード書き込みを試してみる - m-kawato's diary