反射获取存储器列表
Android中只提供了获取默认存储目录的API:Environment.getExternalStorageDirectory().getAbsolutePath(),可能是SD卡,也可能是手机自带存储,只能获取一个,开发又不能写死路径,因为不是每部手机的路径都是一样的。
网上有人说,可以通过反射的方向获取手机的存储目录,但是无法判别哪个是SD卡,哪个是手机自带存储,以下是代码:
StorageManager storageManager = (StorageManager) getSystemService(Context.STORAGE_SERVICE);
try {
Class<?>[] paramClasses = {};
Method getVolumePathsMethod = StorageManager.class.getMethod("getVolumePaths", paramClasses);
getVolumePathsMethod.setAccessible(true);
Object[] params = {};
Object invoke = getVolumePathsMethod.invoke(storageManager, params);
for (int i = 0; i < ((String[])invoke).length; i++) {
System.out.println(((String[])invoke)[i]);
}
} catch (NoSuchMethodException e1) {
e1.printStackTrace();
} catch (IllegalArgumentException e) {
e.printStackTrace();
} catch (IllegalAccessException e) {
e.printStackTrace();
} catch (InvocationTargetException e) {
e.printStackTrace();
}
虽然无法分清哪个是哪个,但有时需求就是获得所有存储目录下的资源,这个方法就很好解决多存储目录这个问题了。