参考文章:
http://blog.csdn.net/whminyi/article/details/51495942
http://blog.csdn.net/luckytzq/article/details/46828873
http://vjson.com/wordpress/%E8%8E%B7%E5%8F%96android%E8%AE%BE%E5%A4%87%E6%8C%82%E8%BD%BD%E7%9A%84%E6%89%80%E6%9C%89%E5%AD%98%E5%82%A8%E5%99%A8.html
最近遇到了需要获取外部存储设备挂载路径的问题,在这里记录一下学到的方法。
一、注册监听
1、如果是监听activity广播在其oncreate方法里要这样写
IntentFilter iFilter = new IntentFilter();
iFilter.addAction(Intent.ACTION_MEDIA_EJECT);
iFilter.addDataScheme("file");
registerReceiver(mBroadcastReceiver , iFilter);
2、如果是监听全局广播则要在mainfast文件中注册
<receiver android:name=".activities.widget.UsbBroadCastReceiver">
<intent-filter android:priority="1000">
<action android:name="android.intent.action.MEDIA_MOUNTED"/>
<action android:name="android.intent.action.MEDIA_EJECT" />
<data android:scheme="file"/>
</intent-filter>
</receiver>
特别注意mainfast中加上<data android:scheme="file"/> 或者代码注册时加上iFilter.addDataScheme("file"); 否则监听不到广播
对于获取USB路径,可以直接获取:
String path = intent.getData().getPath();
另有 intent.getDataString(); 的说法
(我是成功监听了的,但另有博文说这个监听监听不到,应该使用下面两个
android.hardware.usb.action.USB_DEVICE_ATTACHED android.hardware.usb.action.USB_DEVICE_DETACHED,没有确认)
二、获取设备所有的挂载路径,并通过条件判断是否是所求路径
众所周知,谷歌提供给了我们获取Android内置存储卡的绝对路径的方法,但是如果要获取外置的存储的路径的话,谷歌就没有提供了。我们需要自己去写方法来获取这些路径,比如外置的tf卡,OTG挂载的U盘等。
那么采用什么方法呢,android说白了也就是一种Linux系统,采用的是linux的内核。而linux中挂载存储设备使用的是 mount 命令来挂载设备到文件系统中。如: