Android获取外置SD卡路径

来源:互联网 发布:淘宝店铺装修布局管理 编辑:程序博客网 时间:2024/05/11 22:38

通过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卡路径。