问题:应用中有一个下载模块,下了一个判断SD卡剩余空间的方法,发现下载完成一个应用后,再下载其他应用的时返回的SD卡剩余空间的值没变。
定位原因:StatFsstatFs = new StatFs(file.getPath());只创建了一次。
解决办法:每次判断空间的时候都要新new一下。获取最新的存储信息。
及时获取SD卡剩余空间的方法:
/**
* sd卡剩余了空间
*
* @return 大小,M为单位
*/
static public long getAvailableSDSize() {
String sdcard = Environment.getExternalStorageState();
String state = Environment.MEDIA_MOUNTED;
if (sdcard.equals(state)) {
File path =Environment.getExternalStorageDirectory();
StatFs stat = new StatFs(path.getPath());//在这里去new一个状态值,每次使用的时候都newy一个新的状态值这样才会保证,随时能监听到剩余空间的大小改变。
long blockSize = stat.getBlockSize();
//获取可用区块数量
long availableBlocks =stat.getAvailableBlocks();
long totalSDSizeUser = availableBlocks * blockSize / 1024 / 1024;
//Log.d("lgp", "getAvailableSDSize: " + path +":" + totalSDSizeUser + ":" + blockSize);
return totalSDSizeUser;
} else {
return -1;
}}