真実の楽譜(フルスコア)

プログラム関係の忘備録になるはず

Androidで外部保存域の空き容量を取得する

Androidで無造作にデータを保存して、
空き容量が無いってことをしないために。

検索でよく引っかかったのが
StatFsクラスのgetAvailableBlocksメソッドを使う以下の例

long freeByteSize = 0;
String state = Environment.getExternalStorageState();

//外部保存領域が使用可能かチェック
if(Environment.MEDIA_MOUNTED.equals(state) || 
    Environment.MEDIA_MOUNTED_READ_ONLY.equals(state))
{
  //サイズ取得
  StatFs statFs = new StatFs(Environment.getExternalStorageDirectory().getAbsolutePath());
  freeByteSize = (long)statFs.getBlockSize() * (long)statFs.getAvailableBlocks();
}

しかしこのソースEclipse(ADT)では、

メソッド getBlockSize() は型 StatFs で使用すべきではありません
メソッド getAvailableBlocks() は型 StatFs で使用すべきではありません

と警告を受けます。

警告は無視しても作れますが気になるので別の方法を調べたところ、
どうやらAndroid API 9からは FileクラスのgetFreeSpaceが使えるらしい。

long freeByteSize = 0;
String state = Environment.getExternalStorageState();

//外部保存領域が使用可能かチェック
if(Environment.MEDIA_MOUNTED.equals(state) || 
    Environment.MEDIA_MOUNTED_READ_ONLY.equals(state))
{
  //サイズ取得
  freeByteSize = Environment.getExternalStorageDirectory().getFreeSpace();
}

これで警告も消えて一安心。

参考
http://stackoverflow.com/questions/8133417/android-get-free-size-of-internal-external-memory
http://www.techdoctranslator.com/android/guide/data-storage