android获取SD卡剩余空间及注意事项

获取SD卡剩余空间方法。

String storage = Environment.getExternalStorageDirectory().getAbsolutePath();
StatFs fs = new StatFs(storage);
//可用的blocks的数量
long availableBolocks=fs.getAvailableBlocks();
//单个block的大小
long blockSize=fs.getBlockSize();
//sd卡的剩余空间
long available=availableBolocks*blockSize;

fs.getBlockCountLong();
//sd卡总的block数量

注意getAvailableBlocks已弃用,从api 18开始用getAvailableBlocksLong.

弃用方法内部实现:

@Deprecated
public int getAvailableBlocks() {
    return (int) mStat.f_bavail;
}

可以看出其将其转化为int型。使用弃用方法在内存大时容易造成内存溢出,导致得到的值为负值,但在Log打印时打印出来的却不是 负值,导致在进行一些数值比较时,引发一些外表看起来不可思议的事情,其实本质原因就是赋为int超出其取值范围了,因为你使用时最好将其转化为long类型,或者使用getAvailableBlocksLong;其没有将其强转为int,因此安全些。

虽然是个小问题但还是养成良好的习惯,记录一下,嘎嘎。

你可能感兴趣的:(android开发)