最近项目开发中碰到这样一个需求:用户在定制的 Android 设备上插入 U 盘,然后在应用内导入 U 盘里的文件内容。
问题在于如何获取 U 盘的路径,网上搜索后大多数都是采用广播监听的方式来获取 U 盘的路径。但是如果 U 盘在设备开机之前就插着,这样登录应用后就获取不到 U 盘的路径了,于是乎此种方法作罢。
这时候伟大同事告诉了另外一种方法,就是从文件中读取路径。
U 盘在插入系统后,如果系统检测到 U盘,便会在系统的 proc 目录的 mounts 文件内产生一条记录。
可以看到该文件记录了 U 盘每一次插入的相关信息(看不清楚?好吧,我摘取其中的一条用日志打印出来如下)。
很长的一条信息,可能你看不懂(其实我也看不懂),没关系,找到对自己有用的信息即可。是不是发现了 /mnt/sdaq/sdaq1 这样一条信息,没错,他就是我们需要的 U 盘挂载的路径。我们只需要把 /proc/mounts 文件内的带 vfat 的最后一行找到,截取其中的 U 盘路径即可。代码如下:
|
|
最后,可能有小伙伴会问「既然是定制的 Android 设备,第一次插入的时候不是知道了 U 盘的路径了吗,只要以后写死这个路径不就好了吗」。好吧,其实当时我也是这么想的,但是实际上每次插拔 U 盘,路径是不断变化的,而且仔细看上面那张大图可以发现每条记录的 U 盘挂载路径都是不同的,这也是不能写死路径的原因。(PS:十分感谢同事「开志哥」在项目中给予的帮助)