android通过反射获取内置外置存储器列表
16lz
2021-01-23
我们知道android上一般都有外置的存储卡,
但是通过Environment.getExternalStorageDirectory()获取的是内置的存储卡位置
(也有的手机可以在系统中修改默认存储)
那么如何获取外置存储卡的位置呢?
我在参考了android上通过反射,获取存储器列表
后发现可以通过反射来获取
StorageManager中有几个共有的方法被标识为@hide,可能出于安全考虑?
比如,getVolumePaths,getVolumeList所以用不了,
而反射可以做到,
具体代码如下
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();}
还有点问题就是 无法区分内置卡和外置卡
更多相关文章
- Android 反射调用类
- Android RadioButton 图片位置和大小
- Android爬坑-悬浮窗显示位置问题
- [置顶] Android动态添加控件约束位置
- Android获取View位置getHitRect、getDrawingRect、getLocalVisib
- 基于百度地图的android地理位置获取
- Android 开机震动的调用位置以及打开关闭方法
- android反射调用
- Android assets文件夹之位置放置和作用( AS 和eclipse中的 )