android外存儲的狀態

android設備的外存儲,不僅僅指SD卡,當然最常見的就是SD卡,但現在很多手機自帶的空間就比較大比如8G或16G或32G,這些空間,android設備在識別的時候也把它們當作是外部存儲,這些外部存儲有下面這些狀態:

MEDIA_BAD_REMOVAL    
如果外部存儲沒有被移出就把直接拔掉後的狀態(就像我們在pc上面使用u盤一樣,我們沒有安全移出u盤,就把u盤拔掉)

MEDIA_CHECKING          
當外存儲剛被連接到手機上,手機要對外存儲進行檢測,還有就是手機開機後也要對外存儲設置進行檢測,在這檢測過程中就是這一狀態。 

MEDIA_MOUNTED           
當外存儲是可以讀,也可以寫的時候,也就是外存儲正常的時候大多數的狀態。如果有的外存儲有寫保護並打開了,那麼這個外存儲設置連接後,就只可以被讀了,就不是這個狀態了。

MEDIA_MOUNTED_READ_ONLY   
如果外存儲連接到手機上,並且這個外存儲已經打開發寫保護開關,那麼就是這個狀態。

MEDIA_NOFS    
當外存儲壞了使存儲空間爲0(常見的我們把u盤插入pc上時顯示0字節空間)或者外存儲所用的文件系統格式系統不認識那麼就是這個狀態

REMOVED   
如果外存儲不存在則是這個狀態

MEDIA_SHARED
這個在手機上面比較少見,但在pc上很常見,比如在pc上面,我們把手機連接到電腦的時候,有的手機就會顯示一個選擇,是充電還是存儲,這個存儲就是分享受手機當中sd卡的存儲,這個時候pc既有讀的權限也有寫的權限,還有手機本身的存儲空間,還有照像機等連接電腦後等。

MEDIA_UNMOUNTABLE   
這個是手機上面的外存儲存在,但系統不能掛載它,常見的就是手機能夠識這個外存儲,並且也能夠識別外存儲的文件系統,但外存儲的文件系統出現問題了。

MEDIA_UNMOUNT    
當手機的外存儲存在,但沒有掛載就是這個狀態(就像我們把u盤從pc上安全移除後,如果我們不把u盤從pc上拔下來,就是這個狀態)



在此附一工具類:


import java.io.File;

import android.os.Environment;

/**
 * 環境工具類
 * @author 任俊傑
 *
 */
public class EnvironmentUtil {

	/**
	 * 外部存儲是否可讀
	 * @return 如果可用返回true,否則返回false
	 */
	public static boolean isExternalStoreReadable() {
		String state = Environment.getExternalStorageState();
		if(     state.equals( Environment.MEDIA_MOUNTED )           || 
				state.equals( Environment.MEDIA_MOUNTED_READ_ONLY ) || 
				state.equals( Environment.MEDIA_SHARED )  )  {
			return true;
		}else {
			return false;
		}
	}
	
	/**
	 * 外部存儲是否可寫
	 * @return 如果可以寫則返回true,否則返回false
	 */
	public static boolean isExternalStoreWritable() {
		String state = Environment.getExternalStorageState();
		if(     state.equals(Environment.MEDIA_MOUNTED)           || 
				state.equals(Environment.MEDIA_SHARED)){
			return true;
		}else {
			return false;
		}
	}
	
	/**
	 * 得到外部存儲可用的空間
	 * @return 剩餘空間的大小,單位是Byte
	 */
	public static long getExternalStoreAvailableSize(){
		if(isExternalStoreWritable()) {
			// 取得sdcard文件路徑
			File pathFile = Environment.getExternalStorageDirectory();
			android.os.StatFs statfs = new android.os.StatFs(pathFile.getPath());
			// 獲取SDCard上每個block的SIZE
			long nBlocSize = statfs.getBlockSize();
			// 獲取可供程序使用的Block的數量
			long nAvailaBlock = statfs.getAvailableBlocks();
			// 計算 SDCard 剩餘大小Byte
			long nSDFreeSize = nAvailaBlock * nBlocSize ;
			return nSDFreeSize;
		}
		return 0;
	}
}


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章