- Date: Sun 05 01 2014
- Category: Android
- Response: Comment 0 Trackback 0
複数の拡張ストレージのアプリ固有ディレクトリ取得 : getExternalCacheDirs()
Android 4.4 (API19 / KitKat) より Context#getExternalFilesDirs() が追加されました。
このメソッドは、拡張ストレージ(内部ストレージ&外部ストレージ)のアプリ固有のディレクトリを File[] で返します。
Ex. Android 4.4.2 Emulator
/storage/sdcard/Android/data/[package name]/files
Android 2.2 (API8 / Froyo) で追加された Context#getExternalFilesDir(String type) (最後にsがない方)では拡張ストレージが内部と外部に分かれていた場合、内部ストレージのディレクトリしか返しませんでした。
外部ストレージのディレクトリを取得するAPIがなかったため、待ちに待ったAPIと言えます。
SupportLibrary v4 でも r19 より ContextCompat#getExternalFilesDirs(Context context, String type) が追加されています。
Android 4.4 と同様の機能を有しますが、残念なことに複数拡張ストレージに対応しているのは Android 4.4 以上です。
Android 4.4 未満の端末では内部ストレージしか返ってきません。
実際に HTC J ISW13HT (Android 4.0.4) で試してみました。
/mnt/sdcard/Android/data/jp.inujirushi.android.sample/files
結果に書いたように内部ストレージのみでHTC端末の外部ストレージ /mnt/sdcard/ext_sd は返ってきませんでした。結局、外部ストレージのディレクトリを取得するには独自実装しかないようです。
----------------------------------------
外部ストレージのディレクトリ取得方法例
1.【過去記事】外部ストレージのパスを取得する(Android 2.2~?)
2.我が征くは肥沃な荒野 - ストレージの扱いが混沌の極みの件
■ Android 4.4 (API 19 / KitKat) で追加された拡張ストレージに関する API
Context#getExternalFilesDirs(String type)
拡張ストレージ内のアプリ固有のディレクトリを返します。
Context#getExternalCacheDirs()
拡張ストレージ内のアプリ固有のキャッシュディレクトリを返します。
Context#getObbDirs()
拡張ストレージ内のOBBファイルディレクトリを返します。
Environment#getStorageState(File path)
指定したパスのストレージの状態を返します。
拡張ストレージ以外のパスが指定された場合 MEDIA_UNKNOWN を返します。
■ 参考
TechBooster C85 Android MagicBook P.37~39
このメソッドは、拡張ストレージ(内部ストレージ&外部ストレージ)のアプリ固有のディレクトリを File[] で返します。
Ex. Android 4.4.2 Emulator
/storage/sdcard/Android/data/[package name]/files
Android 2.2 (API8 / Froyo) で追加された Context#getExternalFilesDir(String type) (最後にsがない方)では拡張ストレージが内部と外部に分かれていた場合、内部ストレージのディレクトリしか返しませんでした。
外部ストレージのディレクトリを取得するAPIがなかったため、待ちに待ったAPIと言えます。
SupportLibrary v4 でも r19 より ContextCompat#getExternalFilesDirs(Context context, String type) が追加されています。
Android 4.4 と同様の機能を有しますが、残念なことに複数拡張ストレージに対応しているのは Android 4.4 以上です。
Android 4.4 未満の端末では内部ストレージしか返ってきません。
実際に HTC J ISW13HT (Android 4.0.4) で試してみました。
StringBuffer sb = new StringBuffer();結果:
File[] files = ContextCompat.getExternalFilesDirs(this, null);
for (File file : files) {
sb.append(file.getAbsolutePath());
sb.append("\n");
}
Log.d("Storage", sb.toString());
/mnt/sdcard/Android/data/jp.inujirushi.android.sample/files
結果に書いたように内部ストレージのみでHTC端末の外部ストレージ /mnt/sdcard/ext_sd は返ってきませんでした。結局、外部ストレージのディレクトリを取得するには独自実装しかないようです。
----------------------------------------
外部ストレージのディレクトリ取得方法例
1.【過去記事】外部ストレージのパスを取得する(Android 2.2~?)
2.我が征くは肥沃な荒野 - ストレージの扱いが混沌の極みの件
■ Android 4.4 (API 19 / KitKat) で追加された拡張ストレージに関する API
Context#getExternalFilesDirs(String type)
拡張ストレージ内のアプリ固有のディレクトリを返します。
Context#getExternalCacheDirs()
拡張ストレージ内のアプリ固有のキャッシュディレクトリを返します。
Context#getObbDirs()
拡張ストレージ内のOBBファイルディレクトリを返します。
Environment#getStorageState(File path)
指定したパスのストレージの状態を返します。
拡張ストレージ以外のパスが指定された場合 MEDIA_UNKNOWN を返します。
■ 参考
TechBooster C85 Android MagicBook P.37~39
スポンサーサイト