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盘路径的方法