注意与StatFs& int在较新的设备上溢出
this answer的方法在具有大型外部存储设备的情况下损坏.
例如在我的Nexus 7上,它现在返回〜2 GB,实际上还有〜10 GB的空间.
// DOES NOT WORK CORRECTLY ON DEVICES WITH LARGE STORAGE DUE TO INT OVERFLOW
File externalStorageDir = Environment.getExternalStorageDirectory();
StatFs statFs = new StatFs(externalStorageDirectory.getAbsolutePath());
int free = (statFs.getAvailableBlocks() * statFs.getBlockSize()) / 1024 / 1024;
改用这个
Returns the number of free bytes on the partition containing this
path. Returns 0 if this path does not exist.
所以,要获得外部存储空间(“SD卡”):
File externalStorageDir = Environment.getExternalStorageDirectory();
long free = externalStorageDir.getFreeSpace() / 1024 / 1024;
或者,如果您真的想使用StatF,但需要支持API级别< 18,这将修复整数溢出:
File externalStorageDir = Environment.getExternalStorageDirectory();
StatFs statFs = new StatFs(externalStorageDir.getAbsolutePath());
long blocks = statFs.getAvailableBlocks();
long free = (blocks * statFs.getBlockSize()) / 1024 / 1024;