外部ストレージのディレクトリー名を直接文字列で記述してはいけません。まず端末ごとに異なる場所が割り当てられている可能性がありますし、Androidのバージョン互換性もなくなります。Android 4.4以降の端末であれば、getExternalFilesDir()
のような専用APIを用いるべきです。参考にしたサイトにも記されていますよね。
次に、ストレージに書き込みを行う場合はAndroidManifest.xmlにusers-permissionの記述が必要になります。これも参考サイトに記されていますよね。
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE">
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE">
READの方はサイトには記されていませんが、「書き込みだけ」という使い方をするアプリはあまりないと思うので、READもセットにしておいた方がいいでしょう。
それから、コンパイルに用いるSDKがAPI 23(Android 6.0)以降の場合、Runtime Permissionという仕組みが導入されたため、コードの記述によってストレージへの読み書きの許可をxmlの記述とは別に得なければなりません。
ただし、<外部ストレージ>/Android/data/<自パッケージ名>
というディレクトリー以下は特別扱いで、Runtime Permissionによる許可を得なくても読み書きができます。この場合もAndroidManifest.xmlへの記述は必要です。
getExternalFilesDir()
を用いて<外部ストレージ>/Android/data/<自パッケージ名>/files/Movies
という場所にディレクトリーを作成するのならば、このような感じで可能なはずです。
Java
1 File dir = getExternalFilesDir(Environment.DIRECTORY_MOVIES);
2 if (!dir.exists()) {
3 boolean result = dir.mkdirs();
4 if (result) {
5 System.out.println("Success");
6 }
7 }
07/26 02:25 本文中のgetExternalFilesDirs()をgetExternalFilesDir()に修正。getExternalFilesDirs()という複数の拡張ストレージを持った端末を想定した、File[]型を返すメソッドも存在するので、誤解を招きかねませんでした。申し訳ありません。