真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

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

小編給大家分享一下Android開發(fā)中如何使用外部應(yīng)用獲取SD卡狀態(tài),相信大部分人都還不怎么了解,因此分享這篇文章給大家參考一下,希望大家閱讀完這篇文章后大有收獲,下面讓我們一起去了解一下吧!

10年的宜昌網(wǎng)站建設(shè)經(jīng)驗(yàn),針對(duì)設(shè)計(jì)、前端、開發(fā)、售后、文案、推廣等六對(duì)一服務(wù),響應(yīng)快,48小時(shí)及時(shí)工作處理。成都全網(wǎng)營銷的優(yōu)勢(shì)是能夠根據(jù)用戶設(shè)備顯示端的尺寸不同,自動(dòng)調(diào)整宜昌建站的顯示方式,使網(wǎng)站能夠適用不同顯示終端,在瀏覽器中調(diào)整網(wǎng)站的寬度,無論在任何一種瀏覽器上瀏覽網(wǎng)站,都能展現(xiàn)優(yōu)雅布局與設(shè)計(jì),從而大程度地提升瀏覽體驗(yàn)。創(chuàng)新互聯(lián)公司從事“宜昌網(wǎng)站設(shè)計(jì)”,“宜昌網(wǎng)站推廣”以來,每個(gè)客戶項(xiàng)目都認(rèn)真落實(shí)執(zhí)行。

先來看看常規(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卡過程中的狀態(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)聽,到現(xiàn)在為止我知道的有兩種方式:

1. 注冊(cè)StorageEventListener來監(jiān)聽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 未安裝 ,并通過 USB 大容量存儲(chǔ)共享 返回
MEDIA_UNMOUNTABLE:返回 SDCard 不可被安裝 如果 SDCard 是存在但不可以被安裝
MEDIA_UNMOUNTED:返回 SDCard 已卸掉如果 SDCard 是存在但是沒有被安裝

如:

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()用來監(jiān)聽大容量存儲(chǔ)是否連接,我對(duì)這個(gè)方法不太了解,原來以為用來監(jiān)聽usb線是否拔出的,可實(shí)際在linux上好像沒什么問題,但在windows上卻無法用來監(jiān)聽usb拔出狀態(tài),期待高手解答。

2. 通過接收Intent來監(jiān)聽sd卡狀態(tài)

sd卡狀態(tài)改變時(shí),MountServices會(huì)發(fā)送Intent,可以通過接收Intent來得到sd卡狀態(tài),Intent中關(guān)于sd卡狀態(tài)的action有:

MEDIA_BAD_REMOVAL_ACTION:sd卡已經(jīng)從sd卡插槽拔出,但是掛載點(diǎn)還沒解除
MEDIA_EJECT_ACTION:用戶想要移除sd卡
MEDIA_MOUNTED_ACTION:sd卡被插入,且已經(jīng)掛載
MEDIA_REMOVED_ACTION:sd卡被移除
MEDIA_SHARED_ACTION:sd卡作為 USB 大容量存儲(chǔ)被共享,掛載被解除
MEDIA_UNMOUNTED_ACTION:sd卡存在,但還沒有掛載
MEDIA_SCANNER_STARTED_ACTION:開始掃描
MEDIA_SCANNER_FINISHED_ACTION:掃描完成

如果只是獲取當(dāng)前sd卡狀態(tài),不需要對(duì)其監(jiān)聽,可以用方法Environment.getExternalStorageState()獲得當(dāng)前sd卡狀態(tài)

外部應(yīng)用獲取SD卡狀態(tài)

像是從android4.0以后,外部應(yīng)用就無法通過android標(biāo)準(zhǔn)接口獲取到SD卡狀態(tài),但是可以通過如下方法獲?。?/p>

1. 通過env 獲取SD卡路徑

String externalStorage = System.getenv("SECONDARY_STORAGE");

2. 通過讀取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;
}

以上是“Android開發(fā)中如何使用外部應(yīng)用獲取SD卡狀態(tài)”這篇文章的所有內(nèi)容,感謝各位的閱讀!相信大家都有了一定的了解,希望分享的內(nèi)容對(duì)大家有所幫助,如果還想學(xué)習(xí)更多知識(shí),歡迎關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道!


網(wǎng)頁名稱:Android開發(fā)中如何使用外部應(yīng)用獲取SD卡狀態(tài)
網(wǎng)址分享:http://weahome.cn/article/jodocc.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部