private void getCardinfo(){
String state=Environment.getExternalStorageState();//获取SD卡状态
if(state.equals(Environment.MEDIA_MOUNTED)){
File sdFile=Environment.getExternalStorageDirectory();
StatFs statfs=new StatFs(sdFile.getPath());
long size=statfs.getBlockSize();//每个block的大小
long total=statfs.getBlockCount();//总block的大小
long available=statfs.getAvailableBlocks();//可用block的大小
Log.i("debug",total*size/1024/1024+"总大小" );
Log.i("debug",available*size/1024/1024+"可用空间" );
}
}
2.使用process,runtime执行命令获得,代码
private long getSDCardSize() {
long size = 0;
Runtime mRuntime = Runtime.getRuntime();
final String cmd = "busybox df -P";
try {
Process pro = mRuntime.exec(cmd);
BufferedReader reader = new BufferedReader(new InputStreamReader(
pro.getInputStream()));
String line = reader.readLine();
while (line != null) {
if (line.contains("/system/sd")) {
Log.i("debug", line);
String[] infos = line.split("\\s+");
size += Integer.parseInt(infos[1]);
} else if (line.contains("/sdcard")) {
String[] infos = line.split("\\s+");
size += Integer.parseInt(infos[1]);
}
line = reader.readLine();
}
} catch (IOException e) {
e.printStackTrace();
}
return size;
}