SD相關內存獲取路徑等

 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 的剩餘容量和總容量。代碼如下:

01 package com.terry;
02   
03 import java.io.File;
04 import java.text.DecimalFormat;
05   
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;
17   
18 public class getStorageActivity extends Activity {
19     private Button myButton;
20     /** Called when the activity is first created. */
21     @Override
22     public void onCreate(Bundle savedInstanceState) {
23         super.onCreate(savedInstanceState);
24         setContentView(R.layout.main); 
25         findView();
26         viewHolder.myButton.setOnClickListener(new OnClickListener() {
27               
28             @Override
29             public void onClick(View arg0) {
30                 // TODO Auto-generated method stub
31                 getSize();
32             }
33         });
34     }
35       
36       
37     void findView(){
38         viewHolder.myButton=(Button)findViewById(R.id.Button01);
39         viewHolder.myBar=(ProgressBar)findViewById(R.id.myProgressBar);
40         viewHolder.myTextView=(TextView)findViewById(R.id.myTextView);
41     }
42       
43       
44       
45     void getSize(){
46         viewHolder.myTextView.setText("");
47         viewHolder.myBar.setProgress(0);
48         //判斷是否有插入存儲卡
49         if(Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED)){
50             File path =Environment.getExternalStorageDirectory();
51             //取得sdcard文件路徑
52             StatFs statfs=new StatFs(path.getPath());
53             //獲取block的SIZE
54             long blocSize=statfs.getBlockSize();
55             //獲取BLOCK數量
56             long totalBlocks=statfs.getBlockCount();
57             //己使用的Block的數量
58             long availaBlock=statfs.getAvailableBlocks();
59               
60             String[] total=filesize(totalBlocks*blocSize);
61             String[] availale=filesize(availaBlock*blocSize);
62             //設置進度條的最大值 
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);
69               
70         }else if(Environment.getExternalStorageState().equals(Environment.MEDIA_REMOVED)){
71             Toast.makeText(getStorageActivity.this, "沒有sdCard", 1000).show();
72         }
73     }
74       
75     //返回數組,下標1代表大小,下標2代表單位 KB/MB
76     String[] filesize(long size){
77         String str="";
78         if(size>=1024){
79             str="KB";
80             size/=1024;
81             if(size>=1024){
82                 str="MB";
83                 size/=1024;
84             }
85         }
86         DecimalFormat formatter=new DecimalFormat();
87         formatter.setGroupingSize(3);
88         String result[] =new String[2];
89         result[0]=formatter.format(size);
90         result[1]=str;
91         return result;
92     }
93 }
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章