博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Android开发——遍历读写U盘、SD卡等外部存储
阅读量:4045 次
发布时间:2019-05-24

本文共 1694 字,大约阅读时间需要 5 分钟。

1.首先需要得到挂载在手机上的有哪些盘符

String[] result = null;        StorageManager storageManager = (StorageManager)getSystemService(Context.STORAGE_SERVICE);        try {            Method method = StorageManager.class.getMethod("getVolumePaths");            method.setAccessible(true);            try {                result =(String[])method.invoke(storageManager);            } catch (InvocationTargetException e) {                e.printStackTrace();            }            for (int i = 0; i < result.length; i++) {                System.out.println("path----> " + result[i]+"\n");            }        } catch (Exception e) {            e.printStackTrace();        }

这里需要用到一个被系统隐藏的方法,即StorageManager下的getVolumePaths()方法。具体通过反射得到。方法返回值为字符串数组,在我的真机上可以获得三个盘符:sdcard0 sdcard1 usbdisk。

2.拿到上面的根目录路径之后,即可运用listFiles()方法遍历所有的文件

private void getAllFiles(File path){          File files[] = path.listFiles();          if(files != null){              for (File f : files){                  if(f.isDirectory()){                      getAllFiles(f);                  }else{                      System.out.println(f);                  }              }          }      }

这样就完成了所有文件的遍历,如果需要读写,通过指定路径拿到File对象实例,再操作文件流即可。

这里需要说明的是,手机如果想读写USB,本身需要支持USB-OTG功能。该功能除了支持U盘,还支持外接鼠标,键盘,游戏手柄,移动硬盘(需要更大电压)等。

从硬件上说,Android4.0或以上系统的智能手机芯片都支持USB-OTG了,如果不支持的话,可能是以下两个原因。   

1、硬件上缺少5V升压器,外接设备没有电压供应。 

2、硬件设备制造商为了省电考虑,从系统上屏蔽了USB-OTG功能。

解决系统屏蔽OTG问题,网上的方法是(没有测试过):

1.ROOT后打开RE管理器,编辑system/etc/vold.fstab文件,在vold.fstab的末尾添加如下代码

# usb otg diskdev_mount usbotg /mnt/usbotg auto /devices/platform/mt_usb /devices/platform/musbfsh_hdrc
2.修改保存,重启手机

3. Android6.0亲测利用反射获取不到U盘的挂载路径,Google了一下发现默认挂载在了/mnt/media_rw/<随机的ID>

ADB Shell里可以正常访问,需要Root权限。

你可能感兴趣的文章
/etc/resolv.conf
查看>>
container_of()传入结构体中的成员,返回该结构体的首地址
查看>>
linux sfdisk partition
查看>>
ipconfig,ifconfig,iwconfig
查看>>
opensuse12.2 PL2303 minicom
查看>>
网络视频服务器移植
查看>>
Encoding Schemes
查看>>
移植QT
查看>>
如此调用
查看>>
计算机的发展史
查看>>
带WiringPi库的交叉编译如何处理一
查看>>
带WiringPi库的交叉笔译如何处理二之软链接概念
查看>>
Spring事务的七种传播行为
查看>>
ES写入找不到主节点问题排查
查看>>
Java8 HashMap集合解析
查看>>
欢迎使用CSDN-markdown编辑器
查看>>
Android计算器实现源码分析
查看>>
Android系统构架
查看>>
Android 跨应用程序访问窗口知识点总结
查看>>
各种排序算法的分析及java实现
查看>>