使用库 libusbhos监听usb设备事件。
libusbhost使用inotify机制 。
源码位置:
system\core\libusbhost的usbhost.c 。
流程:
context->fd = inotify_init();
context->wdd = inotify_add_watch(context->fd, DEV_DIR, IN_CREATE | IN_DELETE);
wds[0] = inotify_add_watch(context->fd, USB_FS_DIR, IN_CREATE | IN_DELETE);
context->wddbus = inotify_add_watch(context->fd, DEV_BUS_DIR, IN_CREATE | IN_DELETE);
ret = read(context->fd, event_buf, sizeof(event_buf));
inotify_rm_watch(context->fd, context->wds[i]);
close(context->fd);
jni的 monitorUsbHostBus
base/services/core/jni/com_android_server_UsbHostManager.cpp
android_server_UsbHostManager_monitorUsbHostBus
通过以下拿到方法usbDeviceAdded
method_usbDeviceAdded =
env->GetMethodID(clazz, "usbDeviceAdded", "(Ljava/lang/String;II[B)Z");
在方法usb_device_added调用method_usbDeviceAdded 。
而 usb_device_added 是作为参数传递到方法usb_host_run。