Android7.1 获取U盘路径

我们都知道android开发难免的要对存储设备进行一些操作,最常见的就是读取文件,存储文件了,今天来具体说说android存储相关的知识,

安卓设备呢,存储分为内部存储和外部存储,内部存储顾名思义就是安卓设备自带的存储器即Sdcard,系统提供了通用api来获取这个存储路径,如下图,在根目录下创建一个文件夹和log.txt文件,

当然上图操作是在程序已经获取到读写操作权限才可以正确使用的,这里不做过多阐述.这里操作的内部存储,如果要对外部存储U盘来进行读写操作呢? 这时候大家都会想到是不是也可以通过Environment来获取呢?很遗憾,这是获取不到的.还有人会说通过插拔广播来获取,只需要注册挂载广播IntentFilter.addAction(Intent.ACTION_MEDIA_MOUNTED);然后在广播里可以通过Intent.getData().getPath()也是可以获取到U盘的路径的,但是,但是来了,如果不想通过广播来获取,有没有办法呢?

当然有,现在就介绍下任何情况下,都能正确获取U盘路径的办法,大致就是通过java的反射机制来通过VolumeInfo获取的,如下代码片段

/*** 获取U盘路径* @return*/
private List getUsbDrivePath(){List allPath = new ArrayList<>();StorageManager mStorageManager = (StorageManager) getSystemService(Context.STORAGE_SERVICE);Class volumeInfoClazz = null;Method getVolumes = null;Method isMountedReadable = null;Method getType = null;Method getPath = null;List volumes = null;try {volumeInfoClazz = Class.forName("android.os.storage.VolumeInfo");getVolumes = StorageManager.class.getMethod("getVolumes");isMountedReadable = volumeInfoClazz.getMethod("isMountedReadable");getType = volumeInfoClazz.getMethod("getType");getPath = volumeInfoClazz.getMethod("getPath");volumes = (List) getVolumes.invoke(mStorageManager);if (volumes.size() == 0) {return null;}for (Object vol : volumes) {if (vol != null && (boolean) isMountedReadable.invoke(vol) && (int) getType.invoke(vol) == 0) {File path2 = (File) getPath.invoke(vol);String p2 = path2.getPath();allPath.add(p2);}}} catch (Exception ex) {ex.printStackTrace();}return null;}


本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!

相关文章

立即
投稿

微信公众账号

微信扫一扫加关注

返回
顶部