Android系统没有在api文档中提及如何获取sd卡全部容量以及可用容量,但是通过查询源码就可以看到如何获取sd卡容量。
方法如下:
File path = Environment.getExternalStorageDirectory();
StatFs stat = new StatFs(path.getPath());
long blockSize = stat.getBlockSizeLong();
long totalBlocks = stmt.getBlockCountLong();
long availableBlocks = stmt.getAvailableBlocksLong();
return Formatter.formatFileSize(Context, totalBlocks * blockSize);
其中,stat.getBlockSizeLong(),stat.getBlockCountLong(), stat.getAvailableBlocksLong()只有在Android4.3及以后才能使用,之前的版本需要使用老版本的api。即stat.getBlockSize(),stat.getBlockCount(),stat.getAvailavleBlocks()。
所以在我们代码需要首先对Android的版本号进行判断,然后再选择相应的api使用。
File path = Environment.getExternalStorageDirectory();
StatFs stat = new StatFs(path.getPath());
// 判断当前Android版本是否大于等于4.3if (Build.VERSION_SDK_INT > = Build.VERSION_CODES.JELLY_BEAN_MR2) {
long blockSize = stat.getBlockSizeLong();
long totalBlocks = stmt.getBlockCountLong();
long availableBlocks = stmt.getAvailableBlocksLong();
return Formatter.formatFileSize(Context, totalBlocks * blockSize);
} else {
// 当前Android版本号小于4.3
long blockSize = stat.getBlockSize();
long totalBlocks = stat.getBlockCount();
long availableBlocks = stmt.getAvailableBlocks();
reutrn Formatter.formatFileSize(Context, totalBlocks * blockSize);
}