多张SD卡,进行读取

/**
* 获取SD根目录,如果没有内存卡返回""值,如果有内存卡
* 由于可能有多张SD卡,首先判断APPRoot文件夹是否存在该SD卡上面,如果有就取这张SD卡;
* 如果没有APPRoot文件夹,就判断哪张SD剩余容量多,选择多的那张内存卡
* @return SD卡路径
*/
public String getSDPath() {
StorageManager sm = (StorageManager) this.getSystemService(Context.STORAGE_SERVICE);
try {
String[] paths = (String[]) sm.getClass().getMethod("getVolumePaths", null).invoke(sm, null);
long maxFreeSize = 0;
int index = 0;
if(paths.length > 0){
for(int i=0; i < paths.length; i++){
File file = new File(paths[i] + APPRoot);
if(file.exists()){
return (paths[i]);
}
}
for(int i = 0; i < paths.length; i++){
StatFs statfs = new StatFs(paths[i]);
long size = statfs.getBlockSize();
long freeSize = statfs.getAvailableBlocks()*size;
if(freeSize > maxFreeSize){
maxFreeSize = freeSize;
index = i;
}
}
return paths[index];
}else{
return "";
}
} catch (IllegalArgumentException e) {
return "";
} catch (IllegalAccessException e) {
return "";
} catch (InvocationTargetException e) {
return "";
} catch (NoSuchMethodException e) {
return "";
}
}

你可能感兴趣的:(android)