Android USB大容量存儲時SD卡狀態監聽(轉)

對SD卡狀態監聽,到如今爲止我知道的有兩種方式:linux

1.註冊StorageEventListener來監聽sd卡狀態windows

StorageEventListener中有onStorageStateChanged()方法,當sd卡狀態改變時,此方法會調用,對各狀態的判斷通常會用到Environment類,此類中包含的有關sd卡狀態的常量有:spa

MEDIA_BAD_REMOVAL:代表SDCard 被卸載前己被移除對象

MEDIA_CHECKING:代表對象正在磁盤檢查get

MEDIA_MOUNTED:代表sd對象是存在並具備讀/寫權限io

MEDIA_MOUNTED_READ_ONLY:代表對象權限爲只讀class

MEDIA_NOFS:代表對象爲空白或正在使用不受支持的文件系統List

MEDIA_REMOVED:若是不存在 SDCard 返回權限

MEDIA_SHARED:若是 SDCard 未安裝 ,並經過 USB 大容量存儲共享 返回方法

MEDIA_UNMOUNTABLE:返回 SDCard 不可被安裝 若是 SDCard 是存在但不能夠被安裝

MEDIA_UNMOUNTED:返回 SDCard 已卸掉若是 SDCard 是存在可是沒有被安裝

如:

  1. public void onStorageStateChanged(String path, String oldState, String newState) {             
  2.             if (newState.equals(Environment.MEDIA_SHARED)) {  
  3.                 //大容量存儲時相關操做  
  4.             } else if (newState.equals(Environment.MEDIA_CHECKING)) {  
  5.                 //檢查sd卡時操做  
  6.             } else if (newState.equals(Environment.MEDIA_MOUNTED)) {  
  7.                 //sd在手機上可用時操做  
  8.             }...  
  9. }  

StorageEventListener中還有onUsbMassStorageConnectionChanged()用來監聽大容量存儲是否鏈接,我對這個方法不太瞭解,原來覺得用來監聽usb線是否拔出的,可實際在linux上好像沒什麼問題,但在windows上卻沒法用來監聽usb拔出狀態,也不知道是驅動有問題仍是我用錯了,期待高手解答。

2.經過接收Intent來監聽sd卡狀態
sd卡狀態改變時,MountServices會發送Intent,能夠經過接收Intent來獲得sd卡狀態,Intent中關於sd卡狀態的action有:
MEDIA_BAD_REMOVAL_ACTION:sd卡已經從sd卡插槽拔出,可是掛載點還沒解除
MEDIA_EJECT_ACTION:用戶想要移除sd卡
MEDIA_MOUNTED_ACTION:sd卡被插入,且已經掛載
MEDIA_REMOVED_ACTION:sd卡被移除
MEDIA_SHARED_ACTION:sd卡做爲 USB 大容量存儲被共享,掛載被解除
MEDIA_UNMOUNTED_ACTION:sd卡存在,但尚未掛載
MEDIA_SCANNER_STARTED_ACTION:開始掃描
MEDIA_SCANNER_FINISHED_ACTION:掃描完成

若是隻是獲取當前sd卡狀態,不須要對其監聽,能夠用方法Environment.getExternalStorageState()得到當前sd卡狀態。

相關文章
相關標籤/搜索