我是否知道如何在SD卡上读取/获取真正的可用空间?我在Android 4.3上运行。我已经尝试了所有可能的东西来正确阅读它,但是我得到的东西有点超过实际可用空间的两倍。
现在我尝试了经典
StatFs stat = new StatFs(Environment.getExternalStorageDirectory().getPath());
availableSpace = (long) stat.getAvailableBlocks() * (long) stat.getBlockSize();
使用API getAvailableBlocksLong
和其他getBlockSizeLong
,结果仍然相同。
唯一可行的(但它不是我需要的)是shell命令df。我也尝试了获得可用的自由空间函数,结果相同。这件事并不仅仅发生在我的设备上,而是在我尝试代码的所有设备上发生。
答案 0 :(得分:1)
使用: -
StatFs stat = new StatFs(Environment.getExternalStorageDirectory().getPath());
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN_MR2)
{
@SuppressWarnings("deprecation")
long sdAvailSize = (long)stat.getAvailableBlocksLong() * (long)stat.getBlockSizeLong();
} else
{
@SuppressWarnings("deprecation")
double sdAvailSize = (double)stat.getAvailableBlocks() * (double)stat.getBlockSize();
}
尝试这样做: -
double gigaAvailable = sdAvailSize / 1073741824;
如果这不起作用,那么将getAvailableBlocks()
更改为getBlockCount()
。
你也可以试试这个: -
/**
* @return Number of gega bytes available on External storage
*/
public static long getAvailableSpaceInGB(){
final long SIZE_KB = 1024L;
final long SIZE_GB = SIZE_KB * SIZE_KB * SIZE_KB;
long availableSpace = -1L;
StatFs stat = new StatFs(Environment.getExternalStorageDirectory().getPath());
availableSpace = (long) stat.getAvailableBlocks() * (long) stat.getBlockSize();
return availableSpace/SIZE_GB;
}
从here复制:)
希望它有所帮助。