您好,登錄后才能下訂單哦!
小編給大家分享一下Android開發中如何使用外部應用獲取SD卡狀態,相信大部分人都還不怎么了解,因此分享這篇文章給大家參考一下,希望大家閱讀完這篇文章后大有收獲,下面讓我們一起去了解一下吧!
先來看看常規獲取SD卡狀態的方法
if (Environment.getExternalStorageState().equals( Environment.MEDIA_MOUNTED)) { // sd card 可用 }else { // 當前不可用 }
Environment.MEDIA_MOUNTED // sd卡在手機上正常使用狀態
Environment.MEDIA_UNMOUNTED // 用戶手工到手機設置中卸載sd卡之后的狀態
Environment.MEDIA_REMOVED // 用戶手動卸載,然后將sd卡從手機取出之后的狀態
Environment.MEDIA_BAD_REMOVAL // 用戶未到手機設置中手動卸載sd卡,直接撥出之后的狀態
Environment.MEDIA_SHARED // 手機直接連接到電腦作為u盤使用之后的狀態
Environment.MEDIA_CHECKINGS // 手機正在掃描sd卡過程中的狀態
在做android開發對sd操作時,最好是sd卡處于Environment.MEDIA_MOUNTED狀態時,對sd卡上的文件進行操作,其他狀態不宜進行操作。
對SD卡狀態監聽,到現在為止我知道的有兩種方式:
1. 注冊StorageEventListener來監聽sd卡狀態
StorageEventListener中有onStorageStateChanged()
方法,當sd卡狀態改變時,此方法會調用,對各狀態的判斷一般會用到Environment類,此類中包含的有關sd卡狀態的常量有:
MEDIA_BAD_REMOVAL:表明SDCard 被卸載前己被移除
MEDIA_CHECKING:表明對象正在磁盤檢查
MEDIA_MOUNTED:表明sd對象是存在并具有讀/寫權限
MEDIA_MOUNTED_READ_ONLY:表明對象權限為只讀
MEDIA_NOFS:表明對象為空白或正在使用不受支持的文件系統
MEDIA_REMOVED:如果不存在 SDCard 返回
MEDIA_SHARED:如果 SDCard 未安裝 ,并通過 USB 大容量存儲共享 返回
MEDIA_UNMOUNTABLE:返回 SDCard 不可被安裝 如果 SDCard 是存在但不可以被安裝
MEDIA_UNMOUNTED:返回 SDCard 已卸掉如果 SDCard 是存在但是沒有被安裝
如:
public void onStorageStateChanged(String path, String oldState, String newState) { if (newState.equals(Environment.MEDIA_SHARED)) { //大容量存儲時相關操作 } else if (newState.equals(Environment.MEDIA_CHECKING)) { //檢查sd卡時操作 } else if (newState.equals(Environment.MEDIA_MOUNTED)) { //sd在手機上可用時操作 }... }
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卡狀態
外部應用獲取SD卡狀態
像是從android4.0以后,外部應用就無法通過android標準接口獲取到SD卡狀態,但是可以通過如下方法獲取:
1. 通過env 獲取SD卡路徑
String externalStorage = System.getenv("SECONDARY_STORAGE");
2. 通過讀取mounts節點獲取SD卡掛載狀態
private boolean isSdcardMounted(){ boolean mounted = false; String line = null; BufferedReader reader = null; try{ reader = new BufferedReader(new FileReader("/proc/mounts")); if(reader == null){ return mounted; } while ((line = reader.readLine()) != null) { String[] tmp = line.split(" "); if(tmp.length >= 2){ if(tmp[1] != null&& tmp[1].equals("/storage/sdcard1")){ mounted = true; break; } } } }catch(FileNotFoundException e){ }catch(IOException ee){ }finally{ try{ if(reader != null) reader.close(); }catch(IOException eee){ } } Log.d(TAG,"isSdcardMounted mounted:"+mounted); return mounted; }
3. SD卡剩余空間獲取
private int getSdcardFreeSpace(){//unit is Million int space = 0; File file = new File("/storage/sdcard1"); if(file.exists()){ long freeSize = file.getUsableSpace(); space = (int)(freeSize/1024/1024); } Log.d(TAG,"getSdcardFreeSpace :"+space); return space; }
以上是“Android開發中如何使用外部應用獲取SD卡狀態”這篇文章的所有內容,感謝各位的閱讀!相信大家都有了一定的了解,希望分享的內容對大家有所幫助,如果還想學習更多知識,歡迎關注億速云行業資訊頻道!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。