学习USB状态监控的可以称之为纠结,以此三部曲。

 

第一曲:得来全不费工夫(Android新增加USB相关API)

一查,发现Android新增加了USB相关内容,如下图(双击图可放大):

 

Android USB状态监控(解决scheme=

Ok,我很喜欢读文档。要点:安装有安卓的设备(android-powered)连接usb,有两种状态,示意图见下(双击图可放大),文档传送门:http://developer.android.com/guide/topics/usb/index.html

文档的译文可以参考:http://www.eoeandroid.com/forum.php?mod=viewthread&tid=115776

注意:此译文kiosks 翻译可能有误,应该翻译为终端

Android USB状态监控(解决scheme=

第一种:外设模式(accessory mode

       eg:诊断设备 or 拔掉电连着电脑的手机(我想的例子)

从2.3.4可以使用,需要引入增加的库,且代码与标准API有一些差别

需要配置manifest文件

第二种:主机模式(host mode

从android3.1开始

      eg:鼠标,u盘(android机顶盒等等)

当然,这些新增加的API中灰常好用。But,有木有,有木有,我们常用的主机模式,居然2.3.4不支持。好吧。只能用老方法。

 

第二曲:别有忧愁暗恨生(文档中查不到的问题)

 

监听USB的思路是,监听系统对于USB插拔发送的广播。通过广播监听,然后获取USB的状态。于是乎,在Intent中,查找Media相关的Action信息如下(双击图可放大):

 

Android USB状态监控(解决scheme=

于是manifest文件中注册(Register),过滤器中配置各种需要监听的Action,如下:(双击图可放大)

Android USB状态监控(解决scheme=

但是有木有啊,居然OnReceiver()方法中没有监听到。居然木有反应。后来有人告知缺少scheme=”file”,但是为什么?查看了文档,并未提及这点。理由是什么?有木有,歪什么?

 

第三曲:解铃还需系铃人(源码中找到答案)

 

文档既然没有明示,于是查看源码。搜索关键字“ACTION_MEDIA_BAD_REMOVAL”,得到结果,见下图:(双击图可放大)

 

显然系统发送此广播时,在前面加了“file://”, 因为发送时加了,当然过滤的时候必须加,否则过滤不到啊。

同样的,搜索关键字“ACTION_MEDIA_MOUNTED”,结果如下:(双击图可放大)

 

Android USB状态监控(解决scheme=

解决问题的方法很简单,注册信息中的Data项中的Scheme设置为file,代码如下:(双击图可放大)

Android USB状态监控(解决scheme=

既然这是个隐藏的问题,那么,让我们找找有木有其他的广播前面也加了scheme呢,搜索关键字“sendBroadcast”,结果无数,继续搜索“Uri.parse”,只有两条,即为“ACTION_MEDIA_MOUNTED”对应的选项。所以这个问题只是个例。

更多相关文章

  1. android uiautomator 截取图片
  2. android 图片解码显示流程
  3. Android - GridView,自定义开关控件,状态选择器selector,自定义对话
  4. Android中图片Bitmap的缩放
  5. Android 异步加载图片分析
  6. 2011.10.14(2)——— android 仿照微信的图片展示功能 之 放大超过

随机推荐

  1. Mac中升级Python2.7到Python3.5步骤
  2. 在save方法中创建两个对象
  3. 【小白自学笔记】【机器学习实战】【Pyth
  4. 使用多处理Pool.map()时不能pickle
  5. 参与一个Python的开源项目Python-QQ
  6. 初学者的Selenium自动化测试指南,基于Pyth
  7. python多版本共存配置
  8. Tensorflow部分函数功能
  9. python爬网页,做k线图
  10. python类的成员和装饰器