Bootstrap

Android获取拓展外置SD卡(可插拔)路径及读写外置SD卡的方法

有需求做一些类似文件管理器的,就会用到获取外置可移动SD卡的路径。一般的通过Environment或者Context获取的都是手机自带的存储卡路径,类似storage/emulated/0/加后缀。由于谷歌之后的意思是像ios一样,不支持外置USB或者外置可移动SD存储。但是国内的厂商一般都支持。先大概分个类,6.0以下的使用方法一,6.0以上的使用方法二。

方法一

1.遍历env的key里面有SECOENDARY_STORAGE这个值,代表是第二储存,即为外置可移动SD卡。EXTERNAL_STORAGE则对应的是手机内部的存储。在华为荣耀6(4.4)上测试的结果是: 外置 storage/sdcard1 , 内置 storage/emulated/0 。自测了一下,String inpath= System.getenv(“EXTERNAL_STORAGE”)获取内置sd卡,和系统的 Environment.getExternalStorageDirectory().getAbsolutePath()获取的结果是一样的

private static void initSDCardPath() {
        try {
            if(TextUtils.isEmpty(exterPath) && TextUtils.isEmpty(innerPath)){
                Map<String, String> map = System.getenv();
                Set<String> set = System.getenv().keySet();
                Iterator<String> keys = set.iterator();
                while (keys.hasNext()) {
                    String key = keys.next();
                    String value = map.get(key);
                    if ("SECONDARY_STORAGE".equals(key)) {
                        if(!TextUtils.isEmpty(value) && value.contains(":")){
                            exterPath = value.split(":")[0];
                        }else{
                            exterPath = value;
                        }
                    }
                    if ("EXTERNAL_STORAGE".equals(key)) {
                        innerPath = value;
                    }
                    if(!TextUtils.isEmpty(exterPath) && !TextUtils.isEmpty(innerPath)){
                        break;
                    }
                }
                LogUtil.i("file browser", "exterPath= "&#
;