有需求做一些类似文件管理器的,就会用到获取外置可移动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= "&#