前言
简单记录一监听和获取USB真实路径,记录一下方便自己查阅。
系统应用下测试!
正文
磁盘监听
监听磁盘挂载和卸载这个就是Android原生接口广播监听,这个之前有介绍过。
IntentFilter intentFilter = new IntentFilter(); intentFilter.addAction(Intent.ACTION_MEDIA_MOUNTED); intentFilter.addAction(Intent.ACTION_MEDIA_EJECT); //intentFilter.addAction(Intent.ACTION_MEDIA_REMOVED); intentFilter.addDataScheme("file"); intentFilter.setPriority(IntentFilter.SYSTEM_HIGH_PRIORITY); registerReceiver(mMountedReceiver, intentFilter);
还有一种方式,监听设备USB_DEVICE_ATTACHED和USB_DEVICE_DETACHED
IntentFilter intentFilter= new IntentFilter(); intentFilter.addAction("android.hardware.usb.action.USB_DEVICE_ATTACHED"); intentFilter.addAction("android.hardware.usb.action.USB_DEVICE_DETACHED"); registerReceiver(mDeviceReceiver, intentFilter);
-
收到USB_DEVICE_ATTACHED广播并不是表示磁盘挂载成功了
-
收到ACTION_MEDIA_MOUNTED广播才表示磁盘挂载成功
获取磁盘路径
遍历所有的VolumeInfo
//这里只是为了打印信息,没有对代码优化 private void findVolumePath() { if (null == mStorageManager) { mStorageManager = (StorageManager) getSystemService(Context.STORAGE_SERVICE); } List<VolumeInfo> listVolumeInfo = mStorageManager.getVolumes(); if (null != listVolumeInfo) { for (VolumeInfo volumeInfo : listVolumeInfo) { Log.d(TAG, "findVolumePath volumeInfo : " + volumeInfo); if (null != volumeInfo) { DiskInfo diskInfo = volumeInfo.getDisk(); Log.d(TAG, "findVolumePath type : " + volumeInfo.getType() + " , diskInfo: " + diskInfo); if (null != diskInfo) { Log.d(TAG, "findVolumePath isUsb() : " + diskInfo.isUsb()); if (diskInfo.isUsb()) { Log.d(TAG, "findVolumePath sysPath : " + diskInfo.sysPath); } } } } } }
上面打印的sysPath就是磁盘真实的挂载路径。
完整日志
//磁盘卸载 mMountedReceiver 222 action : android.intent.action.MEDIA_EJECT findVolumePath volumeInfo : VolumeInfo{private}: findVolumePath type : 1 , diskInfo: null findVolumePath volumeInfo : VolumeInfo{emulated}: findVolumePath type : 2 , diskInfo: null findVolumePath volumeInfo : VolumeInfo{public:8,4}: findVolumePath type : 0 , diskInfo: DiskInfo{disk:8,0}: findVolumePath isUsb() : true findVolumePath sysPath : /sys//devices/platform/soc/13050000.usb/usb4/4-1/4-1:1.0/host0/target0:0:0/0:0:0:0/block/sda mDeviceReceiver 111 action : android.hardware.usb.action.USB_DEVICE_DETACHED
//磁盘挂载 mDeviceReceiver 111 action : android.hardware.usb.action.USB_DEVICE_ATTACHED mMountedReceiver 222 action : android.intent.action.MEDIA_MOUNTED findVolumePath volumeInfo : VolumeInfo{private}: findVolumePath type : 1 , diskInfo: null findVolumePath volumeInfo : VolumeInfo{emulated}: findVolumePath type : 2 , diskInfo: null findVolumePath volumeInfo : VolumeInfo{public:8,4}: findVolumePath type : 0 , diskInfo: DiskInfo{disk:8,0}: findVolumePath isUsb() : true findVolumePath sysPath : /sys//devices/platform/soc/13050000.usb/usb4/4-1/4-1:1.0/host0/target0:0:0/0:0:0:0/block/sda
参考文章
历史上的今天
暂无评论...
随机推荐
余华:麦田里
我在南方长大成人,一年四季、一日三餐的食物都是大米,由于很少吃包子和饺子,这类食物就经常和节日有点关系了。小时候,当我看到做外科医生的父亲手里提着一块猪肉,捧着一袋面粉走回家时,我就知道这一天是什么日子了。在我小时候有很多节日,五月一日是劳动节,六月一日是儿童节,七月一日是建党节,八月一日是建军节,...
关闭Android过度缩放动画
在Android开发者选项中关于动画的设置有三个选项:窗口动画缩放、过渡动画缩放、动画程序时长缩放。这三个“缩放”的具体含义如下:窗口动画缩放:Scaling factor for normal window animations. Setting to 0 will disable win...
Android自定义view生命周期
自定义布局或者自定义view都是一样的流程周期如下 # 进入 onFinishInflate: onAttachedToWindow: onWindowVisibilityChanged: onVisibilityChanged: on...
[转]android NTP时间同步
推荐使用 极客导航:极客导航(http://www.91es.com/jike.html)相关文件:frameworks/base/services/java/com/android/server/SystemServer.javaframeworks/base/services/j...
贾平凹:每个生命都有自己的光芒
一个家庭组合十年,爱情就老了,剩下的只是日子,日子里只是孩子,把鸡毛当令箭,不该激动的事激动,别人不夸自家夸。全不顾你的厌烦和疲劳,没句号地要说下去。我曾经问过许多人,你知道你娘的名字吗?回答是必然的。知道你奶奶的名字吗?一半人点头。知道你老奶奶的名字吗?几乎无人肯定。我就想,真可怜,人过四代,就...
Android自动截图bat脚本
开发中有时候需要截图,工程师截图就好多了,但是测试工程师截图就有点麻烦。作者原话:做开发的总会碰到测试或者项目经理问你要某个界面截图的情况,用手机的快捷键截图再上传效率不高,又不太想用手机助手(怕全家桶),便打起Android的ADB命令的主意。adb指令中screencap指令就是截图方法,再...