Android监听USB插拔事件有两种方式:
一种是在Mainifest.xml中注册
<intent-filter>
<action android:name="android.hardware.usb.action.USB_DEVICE_ATTACHED" />
</intent-filter>
<meta-data
android:name="android.hardware.usb.action.USB_DEVICE_ATTACHED"
android:resource="@xml/device_filter" />
android.hardware.usb.action.USB_DEVICE_ATTACHED即在usb插入是的action意图。在android.hardware.usb.UsbManager类中有多种action的定义,有兴趣的可以查看一下。
device_filter.xml文件是对usb端口和接口的过滤。
<usb-device vendor-id="1118" product-id="688"></usb-device>
<usb-device vendor-id="1027" product-id="24577" /> <!-- FT232RL -->
<usb-device vendor-id="1027" product-id="24596" /> <!-- FT232H -->
<usb-device vendor-id="1027" product-id="24592" /> <!-- FT2232C/D/HL -->
<usb-device vendor-id="1027" product-id="24593" /> <!-- FT4232HL -->
<usb-device vendor-id="1027" product-id="24597" /> <!-- FT230X -->
<usb-device vendor-id="1412" product-id="45088" /> <!-- REX-USB60F -->
即当包含由上述的usb插入时,即会发送USB_DEVICE_ATTACHED action,启动activity。
另一种方式是在代码中遍历匹配,如下所示:
//使用usb时API版本必须是12以上
UsbManager usbManager=(UsbManager) getSystemService(Context.USB_SERVICE);
Map<String,UsbDevice> deviceList=usbManager.getDeviceList();
Iterator<UsbDevice> iterator=deviceList.values().iterator();
while(iterator.hasNext()){
UsbDevice usbDevice=iterator.next();
int deviceID=usbDevice.getDeviceId();
int productID=usbDevice.getProductId();
int vendorID=usbDevice.getVendorId();
//进行匹配todo....
}
ps:API的最低版本是12或以上,12以下的版本没有此功能。
本文介绍了在Android中如何监听USB设备的插拔事件,包括通过Mainfest.xml注册和在代码中遍历匹配的方法。重点提及了android.hardware.usb.action.USB_DEVICE_ATTACHED意图以及device_filter.xml配置文件的作用。

2291

被折叠的 条评论
为什么被折叠?



