方法一:
public static List<StorageInfo> listAllStorage(Context context) {
ArrayList<StorageInfo> storages = new ArrayList<StorageInfo>();
StorageManager storageManager = (StorageManager) context.getSystemService(Context.STORAGE_SERVICE);
try {
Class<?>[] paramClasses = {};
Method getVolumeList = StorageManager.class.getMethod("getVolumeList", paramClasses);
Object[] params = {};
Object[] invokes = (Object[]) getVolumeList.invoke(storageManager, params);
if (invokes != null) {
StorageInfo info = null;
for (int i = 0; i < invokes.length; i++) {
Object obj = invokes[i];
Method getPath = obj.getClass().getMethod("getPath", new Class[0]);
String path = (String) getPath.invoke(obj, new Object[0]);
info = new StorageInfo(path);
Method getVolumeState = StorageManager.class.getMethod("getVolumeState", String.class);
String state = (String) getVolumeState.invoke(storageManager, info.path);
info.state = state;
Method isRemovable = obj.getClass().getMethod("isRemovable", new Class[0]);
info.isRemoveable = ((Boolean) isRemovable.invoke(obj, new Object[0])).booleanValue();
if (info.state.equals(CommonUtil.MOUNTED)) {
storages.add(info);
}
}
}
} catch (Exception e) {
e.printStackTrace();
}
storages.trimToSize();
return storages;
}
public class StorageInfo {
public String path;
public String state;
public boolean isRemoveable;
public StorageInfo(String path) {
this.path = path;
}
public boolean isMounted() {
return "mounted".equals(state);
}
@Override
public String toString() {
return "StorageInfo [path=" + path + ", state=" + state
+ ", isRemoveable=" + isRemoveable + "]";
}
}
方法二:
/**
* 得到所有的存储路径(内部存储+外部存储)
*
* @param context
* @return
*/
public static String[] getAllSdPaths(Context context) {
Method mMethodGetPaths = null;
String[] paths = null;
//通过调用类的实例mStorageManager的getClass()获取StorageManager类对应的Class对象
//getMethod("getVolumePaths")返回StorageManager类对应的Class对象的getVolumePaths方法,这里不带参数
StorageManager mStorageManager = (StorageManager)context
.getSystemService(context.STORAGE_SERVICE);//storage
try {
mMethodGetPaths = mStorageManager.getClass().getMethod("getVolumePaths");
paths = (String[]) mMethodGetPaths.invoke(mStorageManager);
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return paths;
}