Android開發(fā)中使用外部應用獲取SD卡狀態(tài)的方法
本文實例講述了Android開發(fā)中使用外部應用獲取SD卡狀態(tài)的方法。分享給大家供大家參考,具體如下:
先來看看常規(guī)獲取SD卡狀態(tài)的方法
if (Environment.getExternalStorageState().equals(
Environment.MEDIA_MOUNTED)) {
// sd card 可用
}else {
// 當前不可用
}
Environment.MEDIA_MOUNTED // sd卡在手機上正常使用狀態(tài)
Environment.MEDIA_UNMOUNTED // 用戶手工到手機設置中卸載sd卡之后的狀態(tài)
Environment.MEDIA_REMOVED // 用戶手動卸載,然后將sd卡從手機取出之后的狀態(tài)
Environment.MEDIA_BAD_REMOVAL // 用戶未到手機設置中手動卸載sd卡,直接撥出之后的狀態(tài)
Environment.MEDIA_SHARED // 手機直接連接到電腦作為u盤使用之后的狀態(tài)
Environment.MEDIA_CHECKINGS // 手機正在掃描sd卡過程中的狀態(tài)
在做android開發(fā)對sd操作時,最好是sd卡處于Environment.MEDIA_MOUNTED狀態(tài)時,對sd卡上的文件進行操作,其他狀態(tài)不宜進行操作。
對SD卡狀態(tài)監(jiān)聽,到現(xiàn)在為止我知道的有兩種方式:
1. 注冊StorageEventListener來監(jiān)聽sd卡狀態(tài)
StorageEventListener中有onStorageStateChanged()方法,當sd卡狀態(tài)改變時,此方法會調用,對各狀態(tài)的判斷一般會用到Environment類,此類中包含的有關sd卡狀態(tài)的常量有:
MEDIA_BAD_REMOVAL:表明SDCard 被卸載前己被移除
MEDIA_CHECKING:表明對象正在磁盤檢查
MEDIA_MOUNTED:表明sd對象是存在并具有讀/寫權限
MEDIA_MOUNTED_READ_ONLY:表明對象權限為只讀
MEDIA_NOFS:表明對象為空白或正在使用不受支持的文件系統(tǒng)
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()用來監(jiān)聽大容量存儲是否連接,我對這個方法不太了解,原來以為用來監(jiān)聽usb線是否拔出的,可實際在linux上好像沒什么問題,但在windows上卻無法用來監(jiān)聽usb拔出狀態(tài),期待高手解答。
2. 通過接收Intent來監(jiān)聽sd卡狀態(tài)
sd卡狀態(tài)改變時,MountServices會發(fā)送Intent,可以通過接收Intent來得到sd卡狀態(tài),Intent中關于sd卡狀態(tài)的action有:
MEDIA_BAD_REMOVAL_ACTION:sd卡已經(jīng)從sd卡插槽拔出,但是掛載點還沒解除
MEDIA_EJECT_ACTION:用戶想要移除sd卡
MEDIA_MOUNTED_ACTION:sd卡被插入,且已經(jīng)掛載
MEDIA_REMOVED_ACTION:sd卡被移除
MEDIA_SHARED_ACTION:sd卡作為 USB 大容量存儲被共享,掛載被解除
MEDIA_UNMOUNTED_ACTION:sd卡存在,但還沒有掛載
MEDIA_SCANNER_STARTED_ACTION:開始掃描
MEDIA_SCANNER_FINISHED_ACTION:掃描完成
如果只是獲取當前sd卡狀態(tài),不需要對其監(jiān)聽,可以用方法Environment.getExternalStorageState()獲得當前sd卡狀態(tài)
外部應用獲取SD卡狀態(tài)
像是從android4.0以后,外部應用就無法通過android標準接口獲取到SD卡狀態(tài),但是可以通過如下方法獲?。?/p>
1. 通過env 獲取SD卡路徑
String externalStorage = System.getenv("SECONDARY_STORAGE");
2. 通過讀取mounts節(jié)點獲取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相關內(nèi)容感興趣的讀者可查看本站專題:《Android編程開發(fā)之SD卡操作方法匯總》、《Android文件操作技巧匯總》、《Android數(shù)據(jù)庫操作技巧總結》、《Android編程之a(chǎn)ctivity操作技巧總結》、《Android開發(fā)入門與進階教程》、《Android資源操作技巧匯總》、《Android視圖View技巧總結》及《Android控件用法總結》
希望本文所述對大家Android程序設計有所幫助。
- Android編程之判斷SD卡狀態(tài)的方法
- Android獲取監(jiān)聽SD卡狀態(tài)
- Android獲取SD卡路徑及SDCard內(nèi)存的方法
- Android調用相機并將照片存儲到sd卡上實現(xiàn)方法
- android將Bitmap對象保存到SD卡中的方法
- Android實現(xiàn)從網(wǎng)絡獲取圖片顯示并保存到SD卡的方法
- android讀寫sd卡操作寫入數(shù)據(jù)讀取數(shù)據(jù)示例
- Android獲取SD卡上圖片和視頻縮略圖的小例子
- Android 獲取內(nèi)外SD卡路徑幾種方法總結
- Android判斷SD卡是否已經(jīng)掛載的方法
- Android編程實現(xiàn)讀取本地SD卡圖片的方法
相關文章
Android自定義View實現(xiàn)球形動態(tài)加速球
這篇文章主要為大家詳細介紹了Android自定義View實現(xiàn)球形動態(tài)加速球,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下2022-06-06
Kotlin遍歷集合導致并發(fā)修改異常的原因和解決方法
這篇文章主要介紹了Kotlin遍歷集合導致并發(fā)修改異常的原因和解決方法,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧2021-03-03
Android提高之MediaPlayer播放網(wǎng)絡視頻的實現(xiàn)方法
這篇文章主要介紹了Android的MediaPlayer播放網(wǎng)絡視頻的實現(xiàn)方法,是一個非常實用的功能,需要的朋友可以參考下2014-08-08
Android開發(fā)之5.0activity跳轉時共享元素的使用方法
下面小編就為大家分享一篇Android開發(fā)之5.0activity跳轉時共享元素的使用方法,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2018-01-01
Android實現(xiàn)炫酷的網(wǎng)絡直播彈幕功能
這篇文章主要為大家詳細介紹了Android仿網(wǎng)絡直播彈幕功能的實現(xiàn)方法,具有一定的參考價值,感興趣的小伙伴們可以參考一下2016-11-11
Android自定義View實現(xiàn)黑客帝國數(shù)字雨效果
這篇文章主要給大家介紹了關于Android自定義View實現(xiàn)黑客帝國數(shù)字雨效果的相關資料,文中通過示例代碼介紹的非常詳細,需要的朋友可以參考借鑒,下面隨著小編來一起學習學習吧2018-08-08
android開機自啟動原理與實現(xiàn)案例(附源碼)
完成一下步驟后,啟動一次程序,完成注冊。等下次手機開機時,該軟件即會自動啟動,具體實現(xiàn)如下,感興趣的朋友可以參考下哈2013-06-06

