android程序在运行期间,可以检测到外部设备(例如STM32设备,HID设备,U盘等)的插入、拔出事件,然后和外部设备通讯存取数据。
现已经实现功能需求。在此做个简单总结。
设备插入效果:
读取数据
设备拔出
以下为USB设备类型:
当你的Android设备在USB主机模式中时,它作为USB主机给从属设备供电,并会列举被连接的USB设备。USB主机模式在Android3.1以后开始被支持。
因为不是所有的Android设备都保证支持USB主机模式,所以要在你的应用程序声明中包含<uses-feature>元素,以声明你的应用程序要使用android.hardware.usb.host功能。
USB设备插入
系统检测到ACTION_USB_DEVICE_ATTACHED
USB设备拔出
系统检测到ACTION_USB_DEVICE_DETACHED
如果你希望你的应用程序能够自动的检测到你所期望的USB设备,那么要使用Intent过滤器。
监听事件注册一下:
IntentFilter usbDeviceStateFilter = new IntentFilter();
usbDeviceStateFilter.addAction(UsbManager.ACTION_USB_DEVICE_ATTACHED);
usbDeviceStateFilter.addAction(UsbManager.ACTION_USB_DEVICE_DETACHED);
registerReceiver(mUsbReceiver, usbDeviceStateFilter);
然后在广播消息中即可对各种事件进行处理。
注册好监听事件以后,要做的就是接收系统广播消息
创建下面这样的广播接收器来监听事件:
BroadcastReceiver mUsbReceiver = new BroadcastReceiver() {
public void onReceive(Context context, Intent intent) {
String action = intent.getAction();
if (UsbManager.ACTION_USB_DEVICE_DETACHED.equals(action)) {
UsbDevice device = (UsbDevice)intent.getParcelableExtra(UsbManager.EXTRA_DEVICE);
if (device != null) {
// call your method that cleans up and closes communication with the device
}
}
}
};