Android容量検出

5238 ワード

前言:
アプリケーションをダウンロードまたはインストールする前に、現在のシステムメモリとSDカードの残りの容量に関心を持つことが多い.ファイルコピー、移動操作を行う場合は、ターゲットディレクトリの空間サイズを検出する必要があります.Androidシステムは、Androidシステムの容量検出を実現するために、EnvironmentとStatFsの2つのクラスを提供しています.
1.Environmentは、環境変数へのアクセスを提供するクラスです.
Environmentの一般的な方法:方法:getDataDirectory()解釈:Fileに戻り、Androidデータディレクトリを取得します.方法:getDownloadCacheDirectory()解釈:Fileに戻り、Androidダウンロード/キャッシュコンテンツディレクトリを取得します.方法:getExternalStorageDirectory()解釈:Fileを返し、外部ストレージディレクトリであるSDCardを取得する方法:getExternalStoragePublicDirectory(String type)解釈:Fileを返し、ハイエンドの共通の外部ストレージディレクトリを取っていくつかのタイプのファイルを配置する方法:getExternalStorageState()解釈:Fileを返し、外部ストレージデバイスの現在の状態を取得する
戻り値:
MEDIA_BAD_REMOVALは、SDCardがアンインストールされる前に削除されたことを示しています.
MEDIA_CHECKINGは、オブジェクトがディスクチェック中であることを示します
MEDIA_MOUNTEDはSDCardがマウントされていることを示しています
MEDIA_MOUNTED_READ_ONLYは、オブジェクト権限が読み取り専用であることを示します
MEDIA_NOFSは、オブジェクトが空白であるか、サポートされていないファイルシステムMEDIAを使用していることを示します.REMOVEDにSDCardが存在しない場合
              ..... あといくつかの状態の後にあるのは一つ一つ列挙しない
方法:getRootDirectory()解釈:Fileに戻り、Androidのルートディレクトリを取得
1.1 Environmentの応用:
Environmentクラスで外部記憶ディレクトリを取得するには、外部記憶にアクセスする前に必ず外部記憶が使用可能(マウント&使用可能)状態であるか否かを判断する必要があるが、AndroidManifestである.xmlファイルに外部ストレージの読み取りと書き込みの権限を追加します.



SDカードパスを取得:
public String getSDPath(){ 
       File sdDir = null; 
       boolean sdCardExist = Environment.getExternalStorageState()   
                           .equals(Android.os.Environment.MEDIA_MOUNTED);   //  sd      
       if   (sdCardExist)   
       {                               
         sdDir = Environment.getExternalStorageDirectory();//      
      }   
       return sdDir.toString(); 
       
}

2.StatFsクラス
StatFsはlinuxのdfコマンドをシミュレートするクラスで、SDカードと携帯電話のメモリの使用状況を取得します.
StatFsの一般的な方法:getavailableBlocks()解釈:Intを返し、現在使用可能なストレージスペースを取得getBlockCount()解釈:Intを返し、この領域で使用可能なファイルシステム数を取得getBlockSize()解釈:Intを返し、サイズ、バイトを単一ビットとし、ファイルシステムgetFreeBlocks()解釈:Intを返し、ブロック領域の残りの空間restat(String path)解釈:オブジェクトによって参照されるファイルシステムを実行する
3.完全な列:
メモリカードはAndroid携帯電話で随時挿抜可能で、毎回の動作でOSを引き起こすACTION_BROADCAST,本例では前述の手法を用いて,SDCardの残容量と総容量を算出する.コードは次のとおりです.
package com.jalon;

import java.io.File; 
import java.text.DecimalFormat;

import android.R.integer; 
import android.app.Activity; 
import android.os.Bundle; 
import android.os.Environment; 
import android.os.StatFs; 
import android.view.View; 
import android.view.View.OnClickListener; 
import android.widget.Button; 
import android.widget.ProgressBar; 
import android.widget.TextView; 
import android.widget.Toast;

public 
class getStorageActivity extends Activity { 
private Button myButton; 
/** Called when the activity is first created. */ 
@Override 
public 
void onCreate(Bundle savedInstanceState) { 
      super.onCreate(savedInstanceState); 
       setContentView(R.layout.main); 
       findView(); 
       viewHolder.myButton.setOnClickListener(new OnClickListener() { 
         
         @Override 
         public 
void onClick(View arg0) { 
            // TODO Auto-generated method stub 
            getSize(); 
         } 
       }); 
}


void findView(){ 
       viewHolder.myButton=(Button)findViewById(R.id.Button01); 
       viewHolder.myBar=(ProgressBar)findViewById(R.id.myProgressBar); 
       viewHolder.myTextView=(TextView)findViewById(R.id.myTextView); 
}

 

void getSize(){ 
       viewHolder.myTextView.setText(""); 
       viewHolder.myBar.setProgress(0); 
      //          

if(Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED)){ 
         File path =Environment.getExternalStorageDirectory(); 
         //  sdcard     
         StatFs statfs=new StatFs(path.getPath()); 
         //  block SIZE

long blocSize=statfs.getBlockSize(); 
         //  BLOCK  

long totalBlocks=statfs.getBlockCount(); 
         //    Block   

long availaBlock=statfs.getAvailableBlocks(); 
         
         String[] total=filesize(totalBlocks*blocSize); 
         String[] availale=filesize(availaBlock*blocSize); 
         //         

int maxValue=Integer.parseInt(availale[0]) 
         *viewHolder.myBar.getMax()/Integer.parseInt(total[0]); 
         viewHolder.myBar.setProgress(maxValue); 
         String Text="  :"+total[0]+total[1]+"
" +" :"+availale[0]+availale[1]; viewHolder.myTextView.setText(Text); }else if(Environment.getExternalStorageState().equals(Environment.MEDIA_REMOVED)){ Toast.makeText(getStorageActivity.this, " sdCard", 1000).show(); } } // , 1 , 2 KB/MB String[] filesize(long size){ String str=""; if(size>=1024){ str="KB"; size/=1024; if(size>=1024){ str="MB"; size/=1024; } } DecimalFormat formatter=new DecimalFormat(); formatter.setGroupingSize(3); String result[] =new String[2]; result[0]=formatter.format(size); result[1]=str; return result; } }