我们知道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();}

还有点问题就是 无法区分内置卡和外置卡

更多相关文章

  1. Android 反射调用类
  2. Android RadioButton 图片位置和大小
  3. Android爬坑-悬浮窗显示位置问题
  4. [置顶] Android动态添加控件约束位置
  5. Android获取View位置getHitRect、getDrawingRect、getLocalVisib
  6. 基于百度地图的android地理位置获取
  7. Android 开机震动的调用位置以及打开关闭方法
  8. android反射调用
  9. Android assets文件夹之位置放置和作用( AS 和eclipse中的 )

随机推荐

  1. adb monkey(详细分析)
  2. AOP面向切面编程
  3. android email 邮件转发 附件不能转发问
  4. android 布局之ConstraintLayout的使用
  5. Android开发环境的搭建方法
  6. Android(安卓)Binder Mechanism (4) --
  7. 自定义控件SettingItemView
  8. Android(安卓)4.2一些变动
  9. 编写高效Android代码
  10. 使用Genymotion时出现INSTALL_FAILED_CPU