對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 是存在可是沒有被安裝
如:
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卡狀態。