Android N获取外置SD卡或挂载U盘路径的方法

  

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

        .getAbsolutePath Environment.getExternalStorageDirectory () ();      

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

        公共静态文件getExternalStorageDirectory () {   throwIfUserRequired ();   返回sCurrentUser.getExternalDirs () [0];   }   之前      

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

        框架/基地/核心/java/android/os/存储/StorageVolume.java/* *   *返回true,如果体积是可移动的。   *   * @return是可移动的   */公共布尔isRemovable () {   返回mRemovable;   }/* *   *返回路径卷挂载。   *   * @return山的道路   * @hide   */公共字符串getPath () {   返回mPath.toString ();   }/* * {@hide} */公共文件getPathFile () {   返回mPath;   }   之前      

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

  

<强> 1,在清掉AndroidManifest.xml文件中添加需要的权限

        & lt; uses-permission android: name=" android.permission.MOUNT_UNMOUNT_FILESYSTEMS "/比;   & lt; uses-permission android: name=" android.permission.WRITE_EXTERNAL_STORAGE "/比;   & lt; uses-permission android: name=" android.permission.READ_EXTERNAL_STORAGE "/祝辞      

<强> 2,通过反射获取外置SD卡或挂载U盘路径

        私人StorageManager mStorageManager;   mStorageManager=(StorageManager) getSystemService (Context.STORAGE_SERVICE);//获取所有挂载的设备(内部sd卡,外部sd卡,挂载的U盘)   List卷=mStorageManager.getStorageVolumes ();   尝试{   Class<& # 63;比;storageVolumeClazz=类   .forName (“android.os.storage.StorageVolume”);//通过反射调用系统隐藏的方法   方法getPath=storageVolumeClazz.getMethod (“getPath”);   方法isRemovable=storageVolumeClazz.getMethod (“isRemovable”);   for (int i=0;我& lt;volumes.size ();我+ +){   StorageVolume StorageVolume=volumes.get (i);//获取每个挂载的StorageVolume//通过反射调用getPath, isRemovable   字符串storagePath=(字符串)getPath.invoke (storageVolume);//获取路径   布尔isRemovableResult=(布尔)isRemovable.invoke (storageVolume);//是否可移除   字符串描述=storageVolume.getDescription(这个);   日志。d(“杰森”、“我=" +我+”,storagePath=" + storagePath   +”,isRemovableResult=" + isRemovableResult +”,描述=" +描述);   }   }捕捉(异常e) {   日志。d(“杰森”、“e:“+ e);   }   之前      Android N

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

Android N获取外置SD卡或挂载U盘路径的方法