【背景】

需要在一个android的app中实现检测usb插入的事件。

【折腾过程】

1.参考:

看到这个:android.intent.action.UMS_CONNECTED

2.去搜:

UMS_CONNECTED

找到官网的:

中的:String

ACTION_UMS_CONNECTED

This constant was deprecated in API level 14. replaced by android.os.storage.StorageEventListener

3.所以再去找StorageEventListener,找到:

但是感觉有问题:

USB的class中,有很多种。

此处,我希望检测的是android设备作为HOST,然后外接USB设备:一个USB接口的HART猫,内部就是USB接口的串口,所以,不是这个MSC的类。

所以,感觉应该不是用这个“USB Mass Storage”才对。

4.再去继续找。

->

看到有:android.hardware.usb.action.USB_DEVICE_ATTACHED和ACTION_USB_DEVICE_DETACHED

比较像是我要找的。

5.然后就是:

去看

确保了解Android中USB的Host的逻辑。

6.关于“uses-feature”去学习和总结一下:

然后对应的此处这里的android的app,需要硬件USB OTG以支持USB Host功能,所以写成:

7.接着去学习USB知识。

看了:

的解释才知道:

原来对于之前加的那个intent-filter和meta-data的话,是:When users connect a device that matches your device filter, the system presents them with a dialog that asks if they want to start your application.

也就是:

我之前就看到的:

当插入USB,程序还没有运行,就可以看到:

系统检测到对应的USB插入了,然后系统提供的弹出的对话框,问是否打开此程序

但是:

此种效果,明显不是我所需要的。

我需要的是:

在程序已经运行的情况下,去:

动态检测,当前所希望的USB设备,是否插入。

所以,貌似需要去使用其所说的:

了。

8.参考:

去找找:

android.hardware.usb.action

找到:

中的:public static finalStringACTION_USB_DEVICE_ATTACHED

Broadcast Action: A broadcast for USB device attached event. This intent is sent when a USB device is attached to the USB bus when in host mode.containing thefor the attached device

Constant Value:"android.hardware.usb.action.USB_DEVICE_ATTACHED"

public static finalStringACTION_USB_DEVICE_DETACHED

Broadcast Action: A broadcast for USB device detached event. This intent is sent when a USB device is detached from the USB bus when in host mode.containing thefor the detached device

Constant Value:"android.hardware.usb.action.USB_DEVICE_DETACHED"

9.再去搜:

android.hardware.usb.action.USB_DEVICE_ATTACHED

结果回到了:

10.参考:

需要去搞懂如何才能:

”注册一个广播接收“

11.参考:

再去搜:

onReceive

找到:

和:

12.搜:

registerReceiver

看到:

再去参考:

13.最后参考:

再去参考:

14.后来差点解决了,结果遇到android的bug导致没解决:

15.现在,只能再去想其他办法,解决这个动态监听检测USB设备插入的事件。

在此之前,先要去解决:

16.目前,能想到的是,通过另起一个进程,做这个事情,

所以,先去搞懂:

17.上述已经实现了thread+handler去处理usb的检测了。

此处,后来看到:

中的Timer的schedule的TimerTask,所以打算去试试:

【总结】

至此:

既可以用thread,也可以用timer的TimeTask去实现:

动态检测USB设备插入的动作。

都还是不错的。

Logo

华为开发者空间,是为全球开发者打造的专属开发空间,汇聚了华为优质开发资源及工具,致力于让每一位开发者拥有一台云主机,基于华为根生态开发、创新。

更多推荐