最近项目开发中碰到这样一个需求:用户在定制的 Android 设备上插入 U 盘,然后在应用内导入 U 盘里的文件内容。

问题在于如何获取 U 盘的路径,网上搜索后大多数都是采用广播监听的方式来获取 U 盘的路径。但是如果 U 盘在设备开机之前就插着,这样登录应用后就获取不到 U 盘的路径了,于是乎此种方法作罢。

这时候同事告诉了另外一种方法,就是从文件中读取路径。

U 盘在插入系统后,如果系统检测到 U盘,便会在系统的 proc 目录的 mounts 文件内产生一条记录。

可以看到该文件记录了 U 盘每一次插入的相关信息(看不清楚?好吧,我摘取其中的一条用日志打印出来如下)。

很长的一条信息,可能你看不懂(其实我也看不懂),没关系,找到对自己有用的信息即可。是不是发现了 /mnt/sdaq/sdaq1 这样一条信息,没错,他就是我们需要的 U 盘挂载的路径。我们只需要把 /proc/mounts 文件内的带 vfat 的最后一行找到,截取其中的 U 盘路径即可。代码如下:

private void searchPath() {

String filePath = "/proc/mounts";

File file = new File(filePath);

List lineList = new ArrayList<>();

InputStream inputStream =null;

try {

inputStream = new FileInputStream(file);

if (inputStream != null) {

InputStreamReader inputStreamReader = new InputStreamReader(inputStream, "GBK");

BufferedReader bufferedReader = new BufferedReader(inputStreamReader);

String line = "";

while ((line = bufferedReader.readLine()) != null) {

if (line.contains("vfat")) {

lineList.add(line);

}

}

}

} catch (FileNotFoundException e) {

e.printStackTrace();

} catch (IOException e) {

e.printStackTrace();

} finally {

if (inputStream != null) {

try {

inputStream.close();

} catch (IOException e) {

e.printStackTrace();

}

}

}

String editPath = lineList.get(lineList.size() - 1);

int start = editPath.indexOf("/mnt");

int end = editPath.indexOf(" vfat");

String path = editPath.substring(start, end);

Log.d("SelectBusLineDialog", "path: " + path);

}

最后,可能有小伙伴会问「既然是定制的 Android 设备,第一次插入的时候不是知道了 U 盘的路径了吗,只要以后写死这个路径不就好了吗」。好吧,其实当时我也是这么想的,但是实际上每次插拔 U 盘,路径是不断变化的,而且仔细看上面那张大图可以发现每条记录的 U 盘挂载路径都是不同的,这也是不能写死路径的原因。(PS:十分感谢同事「开志哥」在项目中给予的帮助)

更多文章欢迎访问:我的博客

android u盘加载_如何获取Android系统挂载U盘的路径相关推荐

  1. Android使用Glide加载Gif慢 获取gif时间

    1,解决Glide加载Gif非常慢问题 Glide.with(MainActivity.this).load(url).asGif().diskCacheStrategy(DiskCacheStrat ...

  2. android登陆加载加载_如何在Android上侧面加载应用

    android登陆加载加载 Just because an app isn't available from the Google Play Store doesn't mean it's not a ...

  3. 服务器怎么用u盘加载硬盘驱动,戴尔服务器安装用U盘加载硬盘控制卡驱动.pdf

    戴尔服务器安装用U盘加载硬盘控制卡驱动 支持9G,10G,11G 安装windows2003,并且2003 最好带SP2 补丁,不然可能出现蓝屏死机等现象.8G 暂时没有测 试. 使用该软件后,U 盘 ...

  4. android listview动态加载网络图片不显示,Android Listview异步动态加载网络图片

    Android Listview异步动态加载网络图片 详见: http://blog.sina.com.cn/s/blog_62186b460100zsvb.html 标签: Android SDK ...

  5. android listview自动加载更多,如何实现 Android ListView『上拉加载更多』?

    ListView上拉加载更多的UI需求 (1)向上滑动 ListView,当最后一个条目滚入屏幕时开始加载更多条目,在列表底部增加一个 footerView:一个 infinite progressB ...

  6. linux u盘加载阵列卡驱动步骤,Linux操作系统U盘加载阵列卡驱动步骤.doc

    思路 如果没有Linux的机器,可以使用安装光盘的Linux环境:将盘完全格式化,将驱动拷贝到U盘,将U盘插在服务器上,用Linux安装光盘第一张启动到图形安装界面,按Ctrl+Alt+F2切换到控制 ...

  7. Android横竖屏加载不同的XML,Android横竖屏切换View设置不同尺寸或等比例缩放的XML解决方案...

    在一些应用中,涉及到横竖屏切换,View要切换成不同大小比例尺寸.为解决这种开发场景,有多种解决方案,比如可以重写View,实现横竖切换在onMesure或者此类View的回调方法里面重新测量重新绘制 ...

  8. android 涨潮动画加载_潮汐app下载 潮汐 (睡眠白噪音番茄钟) for Android V3.9.1 安卓手机版 下载-脚本之家...

    潮汐app是一款适用于安卓手机端的睡眠.专注与冥想的白噪音番茄钟应用,帮助你从快节奏的当下抽离,进入另一个平和安静的时空,里面提供各种自然声音任你选择,让你的身心回归自然,冥想更自在,还能帮你检测一晚 ...

  9. android 涨潮动画加载_潮汐app怎么使用?潮汐app各功能测评介绍

    拖延症可能是一种绝症,原因是你每次下定决心后,往往草草了事.总是会有各种诱惑还有鸡毛蒜皮的事来打断你. 碎片时间应该变成块状时间,于是手机里有了番茄工作法相关的应用. 第 274 期豌豆荚设计奖,我们 ...

  10. Android Glide图片加载框架(三)缓存机制

    文章目录 一.缓存简介 二.缓存用法 内存缓存方式 磁盘缓存方式 三.缓存KEY 四.内存缓存 内存缓存流程 五.磁盘缓存 磁盘缓存流程 Android Glide图片加载框架系列文章 Android ...

最新文章

  1. shell脚本学习之参数传递
  2. 重拾IP路由选择:CCNA学习指南中的IP路由选择
  3. 在几何画板中如何制作圆柱的侧面展开动画_倒计时与时钟演示 | 几何画板
  4. python的convert_python编程开发之类型转换convert实例分析
  5. 金融时序预测中的深度学习方法综述!
  6. 【软件解决】 解决 TortoiseSVN 图标不显示问题
  7. android 常用代码
  8. div内文本(text)居中对齐
  9. C#创建一个文本文件简单代码
  10. 2022年第十二届MathorCup高校数学建模挑战赛
  11. mysql查询同时选修了两门_查找同时选修了C01及C02两门课程的学生姓名及学号
  12. Html提交表单的制作
  13. List.sort()方法使用拉姆达表达式进行排序的一个例子
  14. 全面提高你的搜索技巧
  15. python沙盒逃逸
  16. 运维(32) Prometheus+Grafana监控SpringBoot
  17. SLG游戏中大地图实现使用四叉树技术
  18. 4、公司融资 - 开公司创业系列文章
  19. 计算机 路由器教案,路由器培训教材
  20. Android获取联系人权限

热门文章

  1. Python 网页爬虫
  2. 2020-10-18
  3. 181223每日一句
  4. Atitit Java制作VCARD vcf 以上就是关于vCard的基本介绍,维基百科(英文)https://en.wikipedia.org/wiki/VCard写的比较全,可惜我看不懂。
  5. Atitit webservice的发现机制 discover机制
  6. org.xml.sax.SAXParseException: 缺少文件根组件。
  7. API网关的几点思考
  8. mysql的dml全程是_MySQL中的DML、DDL、DCL到底是什么呢?
  9. 【优化算法】混沌游戏优化 (CGO)【含Matlab源码 1010期】
  10. 【风速预测】基于matlab EMD+模拟退火算法优化DBN风速预测【含Matlab源码 JQ003期】