通过Environment.getExternalStorageDirectory()得到的是内置sd卡,外置sd卡只能通过其它方法获得。
比较可靠的方案是通过Linux命令,进入adb shell,输入 mount 或者 cat /proc/mounts 可得到系统挂载的存储。其中最后一行或者倒数第二行就是挂载信息,其中的第二个字段对应的就是path。信息如下面所示:
根据这个原理,我们来写获取外置sd卡路径的代码:
try {
Runtime runtime = Runtime.getRuntime();
Process proc = runtime.exec("mount");
InputStream is = proc.getInputStream();
InputStreamReader isr = new InputStreamReader(is);
String line;
BufferedReader br = new BufferedReader(isr);
while ((line = br.readLine()) != null) {
// 将常见的linux分区过滤掉
if (line.contains("secure"))
continue;
if (line.contains("asec"))
continue;
if (line.contains("media"))
continue;
if (line.contains("system") || line.contains("cache")
|| line.contains("sys") || line.contains("data")
|| line.contains("tmpfs") || line.contains("shell")
|| line.contains("root") || line.contains("acct")
|| line.contains("proc") || line.contains("misc")
|| line.contains("obb")) {
continue;
}
if (line.contains("fat") || line.contains("fuse") || (line
.contains("ntfs"))) {
String columns[] = line.split(" ");
if (columns != null && columns.length > 1) {
String path = columns[1];
if (path!=null&&!SdList.contains(path)&&path.contains("sd"))
SdList.add(columns[1]);
}
}
}
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
这里获取的是所有sd卡的路径集合,去掉内置sd卡路径,剩下的就是外置sd卡路径。