国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁(yè) > 系統(tǒng) > Android > 正文

Android開(kāi)發(fā)中使用外部應(yīng)用獲取SD卡狀態(tài)的方法

2019-12-12 01:45:11
字體:
來(lái)源:轉(zhuǎn)載
供稿:網(wǎng)友

本文實(shí)例講述了Android開(kāi)發(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 // 用戶(hù)手工到手機(jī)設(shè)置中卸載sd卡之后的狀態(tài)
Environment.MEDIA_REMOVED // 用戶(hù)手動(dòng)卸載,然后將sd卡從手機(jī)取出之后的狀態(tài)
Environment.MEDIA_BAD_REMOVAL // 用戶(hù)未到手機(jī)設(shè)置中手動(dòng)卸載sd卡,直接撥出之后的狀態(tài)
Environment.MEDIA_SHARED // 手機(jī)直接連接到電腦作為u盤(pán)使用之后的狀態(tài)
Environment.MEDIA_CHECKINGS // 手機(jī)正在掃描sd卡過(guò)程中的狀態(tài)

在做android開(kāi)發(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類(lèi),此類(lèi)中包含的有關(guān)sd卡狀態(tài)的常量有:

MEDIA_BAD_REMOVAL:表明SDCard 被卸載前己被移除
MEDIA_CHECKING:表明對(duì)象正在磁盤(pán)檢查
MEDIA_MOUNTED:表明sd對(duì)象是存在并具有讀/寫(xiě)權(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:用戶(hù)想要移除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:開(kāi)始掃描
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ò)如下方法獲取:

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)容感興趣的讀者可查看本站專(zhuān)題:《Android編程開(kāi)發(fā)之SD卡操作方法匯總》、《Android文件操作技巧匯總》、《Android數(shù)據(jù)庫(kù)操作技巧總結(jié)》、《Android編程之a(chǎn)ctivity操作技巧總結(jié)》、《Android開(kāi)發(fā)入門(mén)與進(jìn)階教程》、《Android資源操作技巧匯總》、《Android視圖View技巧總結(jié)》及《Android控件用法總結(jié)

希望本文所述對(duì)大家Android程序設(shè)計(jì)有所幫助。

發(fā)表評(píng)論 共有條評(píng)論
用戶(hù)名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 云安县| 贺兰县| 临清市| 淅川县| 界首市| 景谷| 峡江县| 泉州市| 扬州市| 许昌市| 永昌县| 年辖:市辖区| 恩施市| 延庆县| 丹江口市| 平潭县| 岳池县| 高安市| 津市市| 印江| 承德市| 东安县| 伊吾县| 昌江| 百色市| 宾阳县| 龙川县| 辽宁省| 蓝山县| 霍山县| 江安县| 六枝特区| 普洱| 稻城县| 宜昌市| 朝阳县| 濮阳市| 沭阳县| 安国市| 昌江| 闽侯县|