Android開發(fā)中使用外部應(yīng)用獲取SD卡狀態(tài)的方法
本文實(shí)例講述了Android開發(fā)中使用外部應(yīng)用獲取SD卡狀態(tài)的方法。分享給大家供大家參考,具體如下:
先來(lái)看看常規(guī)獲取SD卡狀態(tài)的方法
if (Environment.getExternalStorageState().equals( Environment.MEDIA_MOUNTED)) { // sd card 可用 }else { // 當(dāng)前不可用 }
Environment.MEDIA_MOUNTED // sd卡在手機(jī)上正常使用狀態(tài)
Environment.MEDIA_UNMOUNTED // 用戶手工到手機(jī)設(shè)置中卸載sd卡之后的狀態(tài)
Environment.MEDIA_REMOVED // 用戶手動(dòng)卸載,然后將sd卡從手機(jī)取出之后的狀態(tài)
Environment.MEDIA_BAD_REMOVAL // 用戶未到手機(jī)設(shè)置中手動(dòng)卸載sd卡,直接撥出之后的狀態(tài)
Environment.MEDIA_SHARED // 手機(jī)直接連接到電腦作為u盤使用之后的狀態(tài)
Environment.MEDIA_CHECKINGS // 手機(jī)正在掃描sd卡過(guò)程中的狀態(tài)
在做android開發(fā)對(duì)sd操作時(shí),最好是sd卡處于Environment.MEDIA_MOUNTED狀態(tài)時(shí),對(duì)sd卡上的文件進(jìn)行操作,其他狀態(tài)不宜進(jìn)行操作。
對(duì)SD卡狀態(tài)監(jiān)聽(tīng),到現(xiàn)在為止我知道的有兩種方式:
1. 注冊(cè)StorageEventListener來(lái)監(jiān)聽(tīng)sd卡狀態(tài)
StorageEventListener中有onStorageStateChanged()
方法,當(dāng)sd卡狀態(tài)改變時(shí),此方法會(huì)調(diào)用,對(duì)各狀態(tài)的判斷一般會(huì)用到Environment類,此類中包含的有關(guān)sd卡狀態(tài)的常量有:
MEDIA_BAD_REMOVAL:表明SDCard 被卸載前己被移除
MEDIA_CHECKING:表明對(duì)象正在磁盤檢查
MEDIA_MOUNTED:表明sd對(duì)象是存在并具有讀/寫權(quán)限
MEDIA_MOUNTED_READ_ONLY:表明對(duì)象權(quán)限為只讀
MEDIA_NOFS:表明對(duì)象為空白或正在使用不受支持的文件系統(tǒng)
MEDIA_REMOVED:如果不存在 SDCard 返回
MEDIA_SHARED:如果 SDCard 未安裝 ,并通過(guò) USB 大容量存儲(chǔ)共享 返回
MEDIA_UNMOUNTABLE:返回 SDCard 不可被安裝 如果 SDCard 是存在但不可以被安裝
MEDIA_UNMOUNTED:返回 SDCard 已卸掉如果 SDCard 是存在但是沒(méi)有被安裝
如:
public void onStorageStateChanged(String path, String oldState, String newState) { if (newState.equals(Environment.MEDIA_SHARED)) { //大容量存儲(chǔ)時(shí)相關(guān)操作 } else if (newState.equals(Environment.MEDIA_CHECKING)) { //檢查sd卡時(shí)操作 } else if (newState.equals(Environment.MEDIA_MOUNTED)) { //sd在手機(jī)上可用時(shí)操作 }... }
StorageEventListener中還有onUsbMassStorageConnectionChanged()用來(lái)監(jiān)聽(tīng)大容量存儲(chǔ)是否連接,我對(duì)這個(gè)方法不太了解,原來(lái)以為用來(lái)監(jiān)聽(tīng)usb線是否拔出的,可實(shí)際在linux上好像沒(méi)什么問(wèn)題,但在windows上卻無(wú)法用來(lái)監(jiān)聽(tīng)usb拔出狀態(tài),期待高手解答。
2. 通過(guò)接收Intent來(lái)監(jiān)聽(tīng)sd卡狀態(tài)
sd卡狀態(tài)改變時(shí),MountServices會(huì)發(fā)送Intent,可以通過(guò)接收Intent來(lái)得到sd卡狀態(tài),Intent中關(guān)于sd卡狀態(tài)的action有:
MEDIA_BAD_REMOVAL_ACTION:sd卡已經(jīng)從sd卡插槽拔出,但是掛載點(diǎn)還沒(méi)解除
MEDIA_EJECT_ACTION:用戶想要移除sd卡
MEDIA_MOUNTED_ACTION:sd卡被插入,且已經(jīng)掛載
MEDIA_REMOVED_ACTION:sd卡被移除
MEDIA_SHARED_ACTION:sd卡作為 USB 大容量存儲(chǔ)被共享,掛載被解除
MEDIA_UNMOUNTED_ACTION:sd卡存在,但還沒(méi)有掛載
MEDIA_SCANNER_STARTED_ACTION:開始掃描
MEDIA_SCANNER_FINISHED_ACTION:掃描完成
如果只是獲取當(dāng)前sd卡狀態(tài),不需要對(duì)其監(jiān)聽(tīng),可以用方法Environment.getExternalStorageState()
獲得當(dāng)前sd卡狀態(tài)
外部應(yīng)用獲取SD卡狀態(tài)
像是從android4.0以后,外部應(yīng)用就無(wú)法通過(guò)android標(biāo)準(zhǔn)接口獲取到SD卡狀態(tài),但是可以通過(guò)如下方法獲?。?/p>
1. 通過(guò)env 獲取SD卡路徑
String externalStorage = System.getenv("SECONDARY_STORAGE");
2. 通過(guò)讀取mounts節(jié)點(diǎn)獲取SD卡掛載狀態(tài)
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; }
更多關(guān)于Android相關(guān)內(nèi)容感興趣的讀者可查看本站專題:《Android編程開發(fā)之SD卡操作方法匯總》、《Android文件操作技巧匯總》、《Android數(shù)據(jù)庫(kù)操作技巧總結(jié)》、《Android編程之a(chǎn)ctivity操作技巧總結(jié)》、《Android開發(fā)入門與進(jìn)階教程》、《Android資源操作技巧匯總》、《Android視圖View技巧總結(jié)》及《Android控件用法總結(jié)》
希望本文所述對(duì)大家Android程序設(shè)計(jì)有所幫助。
- Android編程之判斷SD卡狀態(tài)的方法
- Android獲取監(jiān)聽(tīng)SD卡狀態(tài)
- Android獲取SD卡路徑及SDCard內(nèi)存的方法
- Android調(diào)用相機(jī)并將照片存儲(chǔ)到sd卡上實(shí)現(xiàn)方法
- android將Bitmap對(duì)象保存到SD卡中的方法
- Android實(shí)現(xiàn)從網(wǎng)絡(luò)獲取圖片顯示并保存到SD卡的方法
- android讀寫sd卡操作寫入數(shù)據(jù)讀取數(shù)據(jù)示例
- Android獲取SD卡上圖片和視頻縮略圖的小例子
- Android 獲取內(nèi)外SD卡路徑幾種方法總結(jié)
- Android判斷SD卡是否已經(jīng)掛載的方法
- Android編程實(shí)現(xiàn)讀取本地SD卡圖片的方法
相關(guān)文章
Android 根據(jù)手勢(shì)頂部View自動(dòng)展示與隱藏效果
這篇文章主要介紹了Android 根據(jù)手勢(shì)頂部View自動(dòng)展示與隱藏效果,本文給大家介紹非常詳細(xì)包括實(shí)現(xiàn)原理和實(shí)例代碼,需要的朋友參考下吧2017-08-08Android下載進(jìn)度監(jiān)聽(tīng)和通知的處理詳解
這篇文章主要為大家詳細(xì)介紹了Android下載進(jìn)度監(jiān)聽(tīng)和通知的處理,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2017-08-08Android中極簡(jiǎn)的js與java的交互庫(kù)(SimpleJavaJsBridge)
本文主要介紹了Android中極簡(jiǎn)的js與java的交互庫(kù)--SimpleJavaJsBridge,它可以讓js與java之間的通信更簡(jiǎn)單。 具有很好的參考價(jià)值,下面跟著小編一起來(lái)看下吧2017-01-01Android 谷歌推薦的VR實(shí)現(xiàn)方式(分享)
下面小編就為大家分享一篇Android 谷歌推薦的VR實(shí)現(xiàn)方式。具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2018-01-01Android創(chuàng)建與解析XML(二)——詳解Dom方式
本篇文章主要介紹了Android創(chuàng)建與解析XML(二)——詳解Dom方式 ,這里整理了詳細(xì)的代碼,有需要的小伙伴可以參考下。2016-11-11Android實(shí)現(xiàn)手指觸控圖片縮放功能
這篇文章主要為大家詳細(xì)介紹了Android實(shí)現(xiàn)手指觸控圖片縮放功能,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2017-12-12Android端內(nèi)數(shù)據(jù)狀態(tài)同步方案VM-Mapping詳解
這篇文章主要介紹了Android端內(nèi)數(shù)據(jù)狀態(tài)同步方案VM-Mapping詳解,本篇文章通過(guò)簡(jiǎn)要的案例,講解了該項(xiàng)技術(shù)的了解與使用,以下就是詳細(xì)內(nèi)容,需要的朋友可以參考下2021-09-09