Android7.1 获取U盘路径

Android7.1 获取U盘路径,第1张

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

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/992629.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-21
下一篇 2022-05-21

发表评论

登录后才能评论

评论列表(0条)

保存