hishidaの開発blog

EBシリーズ(EBPocket,EBWin,EBMac,EBStudio),KWIC Finder,xdoc2txt,読書尚友の開発者ブログ

Android Programming TIPS(3)

システムのファイルパスを得るには

SDカードのファイルパスはAndroid2.1までは/sdcardでしたが、2.2からは/mnt/sdcardになりました。
パス名をハードコーディングすると、移植性に乏しいソフトウェアになります。次のようにシステムのパスを取得するAPIを使用します。

// ルートディレクトリ	( /system )
String rootPath = Environment.getRootDirectory().getPath();
// データディレクトリ	( /data )
String dataPath = Environment.getDataDirectory().getPath();
// ダウンロードキャッシュ	( /cache )
String downloadCachePath = Environment.getDownloadCacheDirectory().getPath();
// 拡張記憶装置	( /sdcard もしくは /mnt/sdcard )
String storagePath = Environment.getExternalStorageDirectory().getPath();

API Lebel8から、公開ディレクトリを取得するgetExternalStoragePublicDirectory()が追加されました。第一引数で取得したい場所を定数で指定します。次の例では、カメラで撮影した写真を保存するディレクトリを取得できます。

String dcimPath = Environment.getExternalStoragePublicDirectory( 
	Environment.DIRECTORY_DCIM ).getPath();

SDカードが装着されているかチェックするには

SDカード上のデータを使用するアプリケーションでは、SDカードが装着されているかどうか必ず確認しましょう。

String sdState = Environment.getExternalStorageState();
if ( sdState.equals(Environment.MEDIA_REMOVED ) ) {
	// SDカードがない
	Toast.makeText(this, "SD CARD not found...", Toast.LENGTH_SHORT).show();
}
else {
	// 通常処理
}

エミュレータでテストする場合、AVDマネージャでSDのないAVDを作れば、"SDが抜かれている"状態を再現できます。