需求:写一个Activity来获取当前手机的SD卡的空间状态,总大小和可用大小,显示在屏幕上
除了判断空间之外,在此之前很可能还需要判断当前手机是否包含sd卡,可以使用下面语句来做判断条件:
if(Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED)){
//对应操作
}
判断sd卡的容量经常会用到,基本每次需要往sd卡里放数据时都应当判断一下当前sd卡的空间是否够用。没有什么太多需要注意的,代码如下:
package com.alexchen.getsizeofsdcard;
import java.io.File;
import android.app.Activity;
import android.os.Bundle;
import android.os.Environment;
import android.os.StatFs;
import android.text.format.Formatter;
import android.widget.TextView;
public class MainActivity extends Activity {
// 需求:在界面上显示当前手机sd卡的总空间和总可用空间
private TextView tvAll;
private TextView tvAvailable;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
tvAll = (TextView) findViewById(R.id.tv_sizeofall);
tvAvailable = (TextView) findViewById(R.id.tv_sizeofavailable);
// 1.首先获取sd卡的目录文件
File fileDir = Environment.getExternalStorageDirectory();
// 2.获取sd卡目录的StatFs对象
// StatFs:Retrieve overall information about the space on a filesystem.
// This is a Wrapper for Unix statfs().
StatFs statFs = new StatFs(fileDir.getPath());
// 3.由statfs对象可以获取当前目录(sd卡目录)的块区大小,总块区数和可用块区数
int blockSizeLong = statFs.getBlockSize();
int availableBlocksLong = statFs.getAvailableBlocks();
int blockCountLong = statFs.getBlockCount();
// 4.通过Formatter.formatFileSize方法来获取空间大小的描述,GB/MB/KB等
String totalSize = Formatter.formatFileSize(this,
(long) (blockSizeLong * blockCountLong));
String availableSize = Formatter.formatFileSize(this,
(long) (blockSizeLong * availableBlocksLong));
tvAll.setText("SD卡总空间为:"+totalSize);
tvAvailable.setText("SD卡可用空间为:"+availableSize);
}
}
显示效果如图: