Androidデバイス(SDカードではない)の空きメモリの量を、Android SDK経由で取得できますか?
もしそうなら、どのように?
this 投稿はあなたの質問にぴったりかもしれません。
このスレッド も確認してください。 SOに関する情報はここにたくさんあります。
少しグーグルで解決策があります( Android git で見つかりました)
File path = Environment.getDataDirectory();
StatFs stat = new StatFs(path.getPath());
long blockSize = stat.getBlockSize();
long availableBlocks = stat.getAvailableBlocks();
return Formatter.formatFileSize(this, availableBlocks * blockSize);
/*************************************************************************************************
Returns size in bytes.
If you need calculate external memory, change this:
StatFs statFs = new StatFs(Environment.getRootDirectory().getAbsolutePath());
to this:
StatFs statFs = new StatFs(Environment.getExternalStorageDirectory().getAbsolutePath());
**************************************************************************************************/
public long TotalMemory()
{
StatFs statFs = new StatFs(Environment.getRootDirectory().getAbsolutePath());
long Total = ( (long) statFs.getBlockCount() * (long) statFs.getBlockSize());
return Total;
}
public long FreeMemory()
{
StatFs statFs = new StatFs(Environment.getRootDirectory().getAbsolutePath());
long Free = (statFs.getAvailableBlocks() * (long) statFs.getBlockSize());
return Free;
}
public long BusyMemory()
{
StatFs statFs = new StatFs(Environment.getRootDirectory().getAbsolutePath());
long Total = ((long) statFs.getBlockCount() * (long) statFs.getBlockSize());
long Free = (statFs.getAvailableBlocks() * (long) statFs.getBlockSize());
long Busy = Total - Free;
return Busy;
}
バイトを人間が読める形式に変換(1 Mb、1 Gbなど)
public static String floatForm (double d)
{
return new DecimalFormat("#.##").format(d);
}
public static String bytesToHuman (long size)
{
long Kb = 1 * 1024;
long Mb = Kb * 1024;
long Gb = Mb * 1024;
long Tb = Gb * 1024;
long Pb = Tb * 1024;
long Eb = Pb * 1024;
if (size < Kb) return floatForm( size ) + " byte";
if (size >= Kb && size < Mb) return floatForm((double)size / Kb) + " Kb";
if (size >= Mb && size < Gb) return floatForm((double)size / Mb) + " Mb";
if (size >= Gb && size < Tb) return floatForm((double)size / Gb) + " Gb";
if (size >= Tb && size < Pb) return floatForm((double)size / Tb) + " Tb";
if (size >= Pb && size < Eb) return floatForm((double)size / Pb) + " Pb";
if (size >= Eb) return floatForm((double)size / Eb) + " Eb";
return "???";
}
StatFs
クラスを使用する必要があるようです。どのパスがデバイスのルートと見なされるかはわかりませんが、内部ストレージの一部である限り、結果はディレクトリに関係なく同じになると思います。このような何かが動作する可能性があります:
StatFs stats = new StatFs("/data");
int availableBlocks = stats.getAvailableBlocks();
int blockSizeInBytes = stats.getBlockSize();
int freeSpaceInBytes = availableBlocks * blockSizeInBytes;
他に何もない場合は、StatFsクラスを使用して、どこを調べるべきかについての良いスタートを切る必要があります。
2013年以降、Googleによって廃止されたメソッドがいくつかあり、これらのメソッドを変更することがあります(API 18以降のみ):
getAvailableBlocks()
からgetAvailableBlocksLong()
へgetBlockCount()
からgetBlockCountLong()
へgetBlockSize()
からgetBlockSizeLong()
へgetFreeBlocks()
からgetFreeBlocksLong()
へ/**
* @return Number of bytes available on internal storage
*/
public static long getInternalAvailableSpace() {
long availableSpace = -1L;
try {StatFs stat = new StatFs(Environment.getDataDirectory()
.getPath());
stat.restat(Environment.getDataDirectory().getPath());
availableSpace = (long) stat.getAvailableBlocks() * (long) stat.getBlockSize();
} catch (Exception e) {
e.printStackTrace();
}
return availableSpace;
}
内部メモリサイズが非常に大きいデバイスでは、int値が小さすぎるため機能しません。たとえば、Motorola xumでは機能しません。次のようなものを使用する必要があります。
int freeSpaceInKilobytes = availableBlocks * (blockSizeInBytes / 1024);
このリンクを参照してください: Androidは内部/外部メモリの空きサイズを取得します これが役立つ場合があります。ここでは、すべてが素敵な方法で説明されています。