获得真正的SD卡可用空间

时间:2014-08-04 09:38:35

标签: java android eclipse storage

我是否知道如何在SD卡上读取/获取真正的可用空间?我在Android 4.3上运行。我已经尝试了所有可能的东西来正确阅读它,但是我得到的东西有点超过实际可用空间的两倍。

现在我尝试了经典

StatFs stat = new StatFs(Environment.getExternalStorageDirectory().getPath());
availableSpace = (long) stat.getAvailableBlocks() * (long) stat.getBlockSize();

使用API​​ getAvailableBlocksLong和其他getBlockSizeLong,结果仍然相同。

唯一可行的(但它不是我需要的)是shell命令df。我也尝试了获得可用的自由空间函数,结果相同。这件事并不仅仅发生在我的设备上,而是在我尝试代码的所有设备上发生。

1 个答案:

答案 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复制:)

希望它有所帮助。