在没学习这知识之前,我根本就不知道怎么去获取sdcard的总容量,原来获取sdcard的总容量是那么的简单。我最初的思路就是先获得sdcard的大小,然后自己是不是还要转换其存储单位呢?我只能说,完全没有必要,android都帮你解决了。那就先看源代码吧。
布局:activity_main.xml
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:paddingBottom="@dimen/activity_vertical_margin"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
tools:context="cn.huse.edi.sdcardSize.MainActivity" >
<TextView
android:id="@+id/tv_sdcardSise"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentTop="true"
android:layout_centerHorizontal="true"
android:layout_marginTop="184dp"
android:text="sdcard的总容量" />
<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignBottom="@+id/tv_sdcardSise"
android:layout_alignLeft="@+id/tv_sdcardSise"
android:layout_marginBottom="46dp"
android:onClick="get"
android:text="获取sdcard总容量" />
</RelativeLayout>
MainActivity.java
package cn.huse.edi.sdcardSize;
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.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.widget.TextView;
public class MainActivity extends Activity {
private TextView tv_sdcardSise;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
//找到控件
tv_sdcardSise = (TextView) findViewById(R.id.tv_sdcardSise);
}
public void get(View v){
//找到sdcard的位置
File directory = Environment.getExternalStorageDirectory();
//硬盘的描述类
StatFs statFs = new StatFs(directory.getAbsolutePath());
//获取硬盘分的块的数量
int blockCount = statFs.getBlockCount();
//每块的大小
long blockSize = statFs.getBlockSize();
//可用块的数量
int availableBlocks = statFs.getAvailableBlocks();
//sdcard的总容量 以字节为单位
long sdcardSize = blockCount*blockSize;
//可用空间 以字节为单位
long availableSdcardSize = blockSize*availableBlocks;
//格式化 转换sdcard大小的单位
String sdcardSizeStr = Formatter.formatFileSize(this, sdcardSize);
String availableSdcardSizeStr = Formatter.formatFileSize(this, availableSdcardSize);
tv_sdcardSise.setText("sdcard总容量:"+sdcardSizeStr+"\r\n可用空间为:"+availableSdcardSizeStr);
}
}
运行截图: