1、講述 Environment 類。
2、講述 StatFs 類。
3、完整例子讀取 SDCard 內存
1、講述 Environment 類
Environment 是一個提供訪問環境變量的類。
Environment 包含常量:
MEDIA_BAD_REMOVAL
解釋:返回getExternalStorageState() ,表明SDCard 被卸載前己被移除
MEDIA_CHECKING
解釋:返回getExternalStorageState() ,表明對象正在磁盤檢查。
MEDIA_MOUNTED
解釋:返回getExternalStorageState() ,表明對象是否存在並具有讀/寫權限
MEDIA_MOUNTED_READ_ONLY
解釋:返回getExternalStorageState() ,表明對象權限爲只讀
MEDIA_NOFS
解釋:返回getExternalStorageState() ,表明對象爲空白或正在使用不受支持的文件系統。
MEDIA_REMOVED
解釋:返回getExternalStorageState() ,如果不存在 SDCard 返回
MEDIA_SHARED
解釋:返回getExternalStorageState() ,如果 SDCard 未安裝 ,並通過 USB 大容量存儲共享 返回
MEDIA_UNMOUNTABLE
解釋:返回getExternalStorageState() ,返回 SDCard 不可被安裝 如果 SDCard 是存在但不可以被安裝
MEDIA_UNMOUNTED
解釋:返回getExternalStorageState() ,返回 SDCard 已卸掉如果 SDCard 是存在但是沒有被安裝
Environment 常用方法:
方法:getDataDirectory()
解釋:返回 File ,獲取 Android 數據目錄。
方法:getDownloadCacheDirectory()
解釋:返回 File ,獲取 Android 下載/緩存內容目錄。
方法:getExternalStorageDirectory()
解釋:返回 File ,獲取外部存儲目錄即 SDCard
方法:getExternalStoragePublicDirectory(String type)
解釋:返回 File ,取一個高端的公用的外部存儲器目錄來擺放某些類型的文件
方法:getExternalStorageState()
解釋:返回 File ,獲取外部存儲設備的當前狀態
方法:getRootDirectory()
解釋:返回 File ,獲取 Android 的根目錄
2、講述 StatFs 類
StatFs 一個模擬linux的df命令的一個類,獲得SD卡和手機內存的使用情況
StatFs 常用方法:
getAvailableBlocks()
解釋:返回 Int ,獲取當前可用的存儲空間
getBlockCount()
解釋:返回 Int ,獲取該區域可用的文件系統數
getBlockSize()
解釋:返回 Int ,大小,以字節爲單位,一個文件系統
getFreeBlocks()
解釋:返回 Int ,該塊區域剩餘的空間
restat(String path)
解釋:執行一個由該對象所引用的文件系統
3、完整例子讀取 SDCard 內存
存儲卡在 Android 手機上是可以隨時插拔的,每次的動作都對引起操作系統進行 ACTION_BROADCAST,本例子將使用上面學到的方法,計算出 SDCard 的剩餘容量和總容量。代碼如下:
04 |
import
java.text.DecimalFormat; |
06 |
import
android.R.integer; |
07 |
import
android.app.Activity; |
08 |
import
android.os.Bundle; |
09 |
import
android.os.Environment; |
10 |
import
android.os.StatFs; |
11 |
import
android.view.View; |
12 |
import
android.view.View.OnClickListener; |
13 |
import
android.widget.Button; |
14 |
import
android.widget.ProgressBar; |
15 |
import
android.widget.TextView; |
16 |
import
android.widget.Toast; |
18 |
public
class getStorageActivity extends
Activity { |
19 |
private
Button myButton; |
20 |
/** Called when the activity is first created. */ |
22 |
public
void onCreate(Bundle savedInstanceState) {
|
23 |
super .onCreate(savedInstanceState);
|
24 |
setContentView(R.layout.main);
|
26 |
viewHolder.myButton.setOnClickListener( new
OnClickListener() { |
29 |
public
void onClick(View arg0) {
|
38 |
viewHolder.myButton=(Button)findViewById(R.id.Button01);
|
39 |
viewHolder.myBar=(ProgressBar)findViewById(R.id.myProgressBar);
|
40 |
viewHolder.myTextView=(TextView)findViewById(R.id.myTextView);
|
46 |
viewHolder.myTextView.setText( "" );
|
47 |
viewHolder.myBar.setProgress( 0 );
|
49 |
if (Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED)){
|
50 |
File path =Environment.getExternalStorageDirectory();
|
52 |
StatFs statfs= new
StatFs(path.getPath()); |
54 |
long
blocSize=statfs.getBlockSize(); |
56 |
long
totalBlocks=statfs.getBlockCount(); |
58 |
long
availaBlock=statfs.getAvailableBlocks(); |
60 |
String[] total=filesize(totalBlocks*blocSize);
|
61 |
String[] availale=filesize(availaBlock*blocSize);
|
63 |
int
maxValue=Integer.parseInt(availale[ 0 ])
|
64 |
*viewHolder.myBar.getMax()/Integer.parseInt(total[ 0 ]);
|
65 |
viewHolder.myBar.setProgress(maxValue);
|
66 |
String Text= "總共:" +total[ 0 ]+total[ 1 ]+ "\n" |
67 |
+ "可用:" +availale[ 0 ]+availale[ 1 ];
|
68 |
viewHolder.myTextView.setText(Text);
|
70 |
} else
if (Environment.getExternalStorageState().equals(Environment.MEDIA_REMOVED)){
|
71 |
Toast.makeText(getStorageActivity. this ,
"沒有sdCard" ,
1000 ).show(); |
76 |
String[] filesize( long
size){ |
86 |
DecimalFormat formatter= new
DecimalFormat(); |
87 |
formatter.setGroupingSize( 3 );
|
88 |
String result[] = new
String[ 2 ];
|
89 |
result[ 0 ]=formatter.format(size);
|