在Android N上并没有提供直接的方法获取外置SD卡或挂载U盘路径,可以通过下面方法获取内置sd卡路径

Environment.getExternalStorageDirectory().getAbsolutePath();

通过查看getExternalStorageDirectory源码发现,Android只是没有公开的接口获取而已

 public static File getExternalStorageDirectory() {  throwIfUserRequired();  return sCurrentUser.getExternalDirs()[0]; }

内置sd卡取的sCurrentUser.getExternalDirs()中的第一个值,通过查看StorageManager公有的方法,发下StorageManager@getStorageVolumes也能获取到所有的StorageVolume,但是通过StorageVolume对象只能调用到一些简单的方法,发现StorageVolume有很多隐藏方法如下:

frameworks/base/core/java/android/os/storage/StorageVolume.java /**  * Returns true if the volume is removable.  *  * @return is removable  */ public boolean isRemovable() {  return mRemovable; }  /**  * Returns the mount path for the volume.  *  * @return the mount path  * @hide  */ public String getPath() {  return mPath.toString(); }  /** {@hide} */ public File getPathFile() {  return mPath; }

竟然没有公开的接口调用这些方法,那就只能想到反射了,具体实现方式如下:

1、在清掉AndroidManifest.xml文件中添加需要的权限

   

2、通过反射获取外置SD卡或挂载U盘路径

  private StorageManager mStorageManager;  mStorageManager = (StorageManager) getSystemService(Context.STORAGE_SERVICE);  //获取所有挂载的设备(内部sd卡、外部sd卡、挂载的U盘)  List volumes = mStorageManager.getStorageVolumes();  try {   Class<?> storageVolumeClazz = Class     .forName("android.os.storage.StorageVolume");   //通过反射调用系统hide的方法   Method getPath = storageVolumeClazz.getMethod("getPath");   Method isRemovable = storageVolumeClazz.getMethod("isRemovable");   for (int i = 0; i < volumes.size(); i++) {    StorageVolume storageVolume = volumes.get(i);//获取每个挂载的StorageVolume        //通过反射调用getPath、isRemovable    String storagePath = (String) getPath.invoke(storageVolume); //获取路径    boolean isRemovableResult = (boolean) isRemovable.invoke(storageVolume);//是否可移除    String description = storageVolume.getDescription(this);    Log.d("jason", " i=" + i + " ,storagePath=" + storagePath      + " ,isRemovableResult=" + isRemovableResult +" ,description="+description);   }  } catch (Exception e) {   Log.d("jason", " e:" + e);  }

以上这篇Android N获取外置SD卡或挂载U盘路径的方法就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持脚本之家。

更多相关文章

  1. Vue和ios、android交互通信
  2. Android(安卓)通过http访问服务器
  3. android系统自带的intent集锦
  4. Android(安卓)Tthread 建立线程使用方法
  5. Android之Fragments
  6. Android字符串资源
  7. Android——线程创建以及handler
  8. ionic上拉翻页及下拉刷新
  9. Android(安卓)实现TextView字符串关键字变色

随机推荐

  1. android 混淆 gson
  2. android 9.0 拍照 相册选择 图片 裁切后
  3. Android(安卓)中 declare-styleable 和 s
  4. Android(安卓)Studio动态调试Smail
  5. singleLine=”true” 和 maxLines=”1″
  6. Android(安卓)自动化测试―robotium(三)Edi
  7. Android弹出框的学习
  8. OKHttp原理解析
  9. android api 中文 (75)―― AdapterView.On
  10. ScrollPane的使用