fc2ブログ

戌印-INUJIRUSHI- (Androidあれこれ)

Androidのプログラミングをメインにしてます。記事に貼られたソースコードはダブルクリックすることで行番号をはずしてコピーすることができます。

 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
10

複数の拡張ストレージのアプリ固有ディレクトリ取得 : 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) で試してみました。
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
スポンサーサイト




Comments

Leave a Comment


Body
プロフィール

とむ・やむくん

Author:とむ・やむくん
管理人について

Windows 7 / 64bit
Eclipse 4.2 Juno (日本語パッチ済)

スポンサーサイト
最新トラックバック
検索フォーム
ブロとも申請フォーム
QRコード
QR
Twitter
2013/01/04 19:00 カウント開始