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权限。


Android开发——遍历读写U盘、SD卡等外部存储的更多相关文章

  1. Android开发 将数据保存到SD卡

    前言: 使用Activity的openFileOutput()方法保存文件,文件是存放在手机空间上,一般手机的存储空间不是很大,存放些小文件还行,如果要存放像视频这样的大文件,是不可行的.对于像视频这 ...

  2. android 数据存储&lt;一&gt;----android短信发送器之文件的读写(手机+SD卡)

    本文实践知识点有有三: 1.布局文件,android布局有相对布局.线性布局,绝对布局.表格布局.标签布局等,各个布局能够嵌套的. 本文的布局文件就是线性布局的嵌套 <LinearLayout ...

  3. 快速解决设置Android 23.0以上版本对SD卡的读写权限无效的问题

    快速解决设置Android 23.0以上版本对SD卡的读写权限无效的问题 转 https://www.jb51.net/article/144939.htm 今天小编就为大家分享一篇快速解决设置And ...

  4. android 数据存储----android短信发送器之文件的读写(手机+SD卡)

    本文实践知识点有有三: 1.布局文件,android布局有相对布局,线性布局,绝对布局,表格布局,标签布局等.各个布局能够嵌套的.本文的布局文件就是线性布局的嵌套 <LinearLayout x ...

  5. 转-Android 之 使用File类在SD卡中读取数据文件

    如果需要在程序中使用sdcard进行数据的存储,那么需要在AndroidMainfset.xml文件中 进行权限的配置: Java代码:   <!-- 在sd中创建和删除文件的权限 --> ...

  6. Android—将Bitmap图片保存到SD卡目录下或者指定目录

    直接上代码就不废话啦 一:保存到SD卡下 File file = new File(Environment.getExternalStorageDirectory(), System.currentT ...

  7. 【Arcgis for android】保存地图截图到sd卡

    关键词:arcgis for android ,截图,bitmap,sd卡 参考文章:http://blog.csdn.net/wozaifeiyang0/article/details/767972 ...

  8. 【Android平台安全方案】の #00-请不要在外部存储(SD卡)加密存储的敏感信息

    本文翻译自https://www.securecoding.cert.org/confluence/display/java/DRD00-J.+Do+not+store+sensitive+infor ...

  9. 【Android 界面效果30】Android中ImageSwitcher结合Gallery展示SD卡中的资源图片

    本文主要是写关于ImageSwitcher结合Gallery组件如何展示SDCard中的资源图片,相信大家都看过API Demo 中也有关于这个例子的,但API Demo 中的例子是展示工程中Draw ...

随机推荐

  1. 【loj10061】最短母串

    #10061. 「一本通 2.4 练习 4」最短母串 内存限制:512 MiB 时间限制:1000 ms 标准输入输出 题目类型:传统 评测方式:文本比较 上传者: 1bentong 提交    提交 ...

  2. CoreData修改了数据模型报错 The model used to open the store is incompatible with the one used to create the store

    在iOS 6 – Core Data 应用程序的开发过程中, App启动时出现如下异常信息: reason = “The model used to open the store is incompa ...

  3. jmeter配置mysql数据库步骤

    安装环境: Windows10系统 jmeter版本:3.0版本 java1.8版本 安装步骤: 1.下载连接mysql数据库jar包,地址:http://download.csdn.net/deta ...

  4. maven-ali镜像网站setting.xml

    简述 使用maven管理jar包的时候,有可能会有网络限制,要解决的这个问题的话可以使用ali的镜像网站. 创建文件 创建settings.xml,内容如下 <settings xmlns=&q ...

  5. Java-注解(不包含元注解)

    @SuppressWarnings:抑制警告 package java.lang; import java.lang.annotation.*; import static java.lang.ann ...

  6. poj1724 ROADS

    题意: N个城市,编号1到N.城市间有R条单向道路.每条道路连接两个城市,有长度和过路费两个属性.Bob只有K块钱,他想从城市1走到城市N.问最短共需要走多长的路.如果到不了N,输出-12<=N ...

  7. python绘图工具包 matplotlib 中文乱码问题

    环境: python2.7 windows 8.1 解决: 改配置文件,把字体改为支持中文的字体. 找到python安装目录下的 \Lib\site-packages\matplotlib\mpl-d ...

  8. CCF|中间数|Java

    import java.util.*; public class tyt { public static void main(String[] args) { Scanner in = new Sca ...

  9. BaseAtapter

    本文用于实现一个通用的BaseAdapter类,统一产品的Adapter类,作为一个工具类,减少重复性工作,增加开发效率. 序 我们在开发项目的过程中,经常会用到ListView.GridView这一 ...

  10. Java长存!12个Java长久占居主要地位的原因

    Java长存!12个Java长久占居主要地位的原因 我们很容易就会遗忘那些曾经在猿群中大热而又被各种新技术掩盖直至堙灭的技术的价值.就拿COBOL这个老猿们当年所用的神器来说,就跟条死鱼一样被现代猿基 ...