Android 通过反射调用获取内置存储和外置sd卡根路径(适用于各个版本)
来源:互联网 发布:淘宝宝贝详情文字描述 编辑:程序博客网 时间:2024/04/30 11:56
Android系统里版本众多,设备型号众多,所以文件的路径有很多种。获取内存路径的方法有很多,最常见的是Environment和File 里的诸多方法,比如Environment.getDataDirectory()和File.getPath()等,以及网上查的形形色色各种方法。但是在不同的Android版本和设备里,这些方法对于获取设备内部存储没什么问题,但是获取SD卡路径往往有问题。后来自己找到个方法,就是通过反射StorageManager获取内外路径,经过多个版本测试,比较好用,所以记录推荐下。
这个方法的核心是先获取内存管理器,然后用invoke获取所有路径,再根据是否可移除(SD卡可移除,内存不行)获取到不同的路径。具体方法如下:
/** * 通过反射调用获取内置存储和外置sd卡根路径(通用) * * @param mContext 上下文 * @param is_removale 是否可移除,false返回内部存储,true返回外置sd卡 * @return */private static String getStoragePath(Context mContext, boolean is_removale) { StorageManager mStorageManager = (StorageManager) mContext.getSystemService(Context.STORAGE_SERVICE); Class<?> storageVolumeClazz = null; try { storageVolumeClazz = Class.forName("android.os.storage.StorageVolume"); Method getVolumeList = mStorageManager.getClass().getMethod("getVolumeList"); Method getPath = storageVolumeClazz.getMethod("getPath"); Method isRemovable = storageVolumeClazz.getMethod("isRemovable"); Object result = getVolumeList.invoke(mStorageManager); final int length = Array.getLength(result); for (int i = 0; i < length; i++) { Object storageVolumeElement = Array.get(result, i); String path = (String) getPath.invoke(storageVolumeElement); boolean removable = (Boolean) isRemovable.invoke(storageVolumeElement); if (is_removale == removable) { return path; } } } catch (ClassNotFoundException e) { e.printStackTrace(); } catch (InvocationTargetException e) { e.printStackTrace(); } catch (NoSuchMethodException e) { e.printStackTrace(); } catch (IllegalAccessException e) { e.printStackTrace(); } return null;}
方法很简单,我写了个demo,地址是:http://download.csdn.net/detail/bit_kaki/9809641,不需要积分,可以测试下。
效果图大概如下:
这是我手机的效果,型号为荣耀X6-BLN-AL10,Android版本6.0,EMUI4.1(没有SD卡)
这是我的华为平板的效果,型号为HUAWEI M2 =A01W,Android5.1.1,EMUI3.1。
这是我的三星平板,型号Galaxy Tab S2,SM-T819C,Android版本6.01.
0 0
- Android 通过反射调用获取内置存储和外置sd卡根路径(适用于各个版本)
- android获取内置和外置SD卡路径
- android获取内置和外置SD卡路径
- android获取内置和外置SD卡路径
- android获取内置和外置SD卡路径
- android获取内置和外置SD卡路径
- Android获取内置和外置sd卡路径的方法
- android 获取文件路径(内置sd卡和外置sd卡)。
- Android中获取内置SD卡和外置SD卡路径的方法
- Android获取机身存储、内置SD卡与外置TF卡路径
- Android-->检测内置/外置SD卡存储卡,枚举所有挂载点(通过反射实现),监听SD卡广播
- Android获取外置存储卡、内置存储卡路径
- 获取内置和外置存储路径
- Android获取不同手机 自身存储和外置SD卡存储路径的解决方案
- Android 内部存储(外置SD卡)和扩展存储卡(TF卡)路径的获取
- Android判断获取内置外置sd卡
- 获取SD卡 tf卡 内置外置存储卡路径名称 路径的方式
- 获取Android系统所有内置SD卡以及外置SD卡路径
- 机器学习的大局观:使用神经网络和TensorFlow来对文本分类
- 关于tinker自动生成application失败的问题
- 什么是依赖注入
- 终于“比较”完美地解决了Linux下的字体问题
- UEditor控件的图片无法正常缩放(“大坑”)
- Android 通过反射调用获取内置存储和外置sd卡根路径(适用于各个版本)
- Mybatis在控制台打印执行的sql语句
- 软件销售一个多月的感想
- Spring(九):Spring AOP Annotation
- 找出、保存整形数组中的非重复项/重复项---java
- Thymeleaf使用过程中遇到的坑
- 安卓客户端通过socket与服务器进行通讯
- java static 与 static静态代码块
- Spring(十):Spring AOP XML