Android如何獲取所有存儲(chǔ)卡掛載路徑
最近因項(xiàng)目需求,需要在存儲(chǔ)卡查找文件,經(jīng)測(cè)試發(fā)現(xiàn)部分手機(jī)掛載路徑查找不到,這里分享一個(gè)有效的方法。
/** ?*?獲取所有存儲(chǔ)卡掛載路徑 ?*?@return ?*/ ????public?static?ListgetMountPathList()?{?? ????????ListpathList?=?new?ArrayList();?? ????????final?String?cmd?=?"cat?/proc/mounts";?? ????????Runtime?run?=?Runtime.getRuntime();//取得當(dāng)前JVM的運(yùn)行時(shí)環(huán)境? ????????try?{?? ????????????Process?p?=?run.exec(cmd);//執(zhí)行命令?? ????????????BufferedInputStream?inputStream?=?new?BufferedInputStream(p.getInputStream());?? ????????????BufferedReader?bufferedReader?=?new?BufferedReader(new?InputStreamReader(inputStream));?? ?? ????????????String?line;?? ????????????while?((line?=?bufferedReader.readLine())?!=?null)?{?? ????????????????//?獲得命令執(zhí)行后在控制臺(tái)的輸出信息?? ????????????????Logger.i(line);?? ????????????????//輸出信息內(nèi)容:??/data/media?/storage/emulated/0?sdcardfs?rw,nosuid,nodev,relatime,uid=1023,gid=1023?0?0 ????????????????String[]?temp?=?TextUtils.split(line,?"?");?? ????????????????//分析內(nèi)容可看出第二個(gè)空格后面是路徑?? ????????????????String?result?=?temp[1];?? ????????????????File?file?=?new?File(result);?? ????????????????//類型為目錄、可讀、可寫,就算是一條掛載路徑 ????????????????if?(file.isDirectory()?&&?file.canRead()?&&?file.canWrite())?{?? ???????????????? Logger.d("add?-->?"+file.getAbsolutePath());?? ????????????????????pathList.add(result);?? ????????????????}?? ?? ????????????????//?檢查命令是否執(zhí)行失敗 ????????????????if?(p.waitFor()?!=?0?&&?p.exitValue()?==?1)?{?? ????????????????????//?p.exitValue()==0表示正常結(jié)束,1:非正常結(jié)束?? ???????????????? Logger.e("命令執(zhí)行失敗!");?? ????????????????}?? ????????????}?? ????????????bufferedReader.close();?? ????????????inputStream.close();?? ????????}?catch?(Exception?e)?{?? ???????? Logger.e(e.toString());?? ???????? //命令執(zhí)行異常,就添加默認(rèn)的路徑 ????????????pathList.add(Environment.getExternalStorageDirectory().getAbsolutePath());?? ????????} ????????return?pathList;?? ????}