システムのファイルパスを得るには
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が抜かれている"状態を再現できます。