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

首頁 > 系統 > Android > 正文

Android開發中使用外部應用獲取SD卡狀態的方法

2020-02-21 17:22:48
字體:
來源:轉載
供稿:網友

Android應用程序開發的時候,我們需要確定外部存儲是否可以正常使用,其實在文件中添加外部存儲的讀寫權限的非常有必要的,武林技術頻道小編今天為大家帶來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卡狀態的方法,希望小編的介紹對大家學習有幫助。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 太谷县| 芒康县| 洞口县| 乃东县| 阿勒泰市| 乌兰察布市| 内乡县| 和田县| 和顺县| 那曲县| 海晏县| 永城市| 车险| 廊坊市| 长白| 水富县| 封丘县| 萝北县| 景谷| 和林格尔县| 临朐县| 阿拉尔市| 长兴县| 信阳市| 郓城县| 连南| 呼伦贝尔市| 会同县| 龙山县| 蛟河市| 南汇区| 宝清县| 玛纳斯县| 封开县| 安阳县| 浦县| 镇原县| 军事| 泽库县| 泽库县| 桂东县|