我目前正在 10.6.7 上开发一个应用程序,它应该在插入新的 USB 设备时接收通知。我发现有一个 IOKit 函数可以处理“IOServiceAddMatchingNotification”这样的东西。因为这个特定函数的返回值是 0,所以我认为问题可能出在我匹配的字典中,它被赋予了这个函数。我以这种方式声明字典:
CFMutableDictionaryRef matchingDict = IOServiceMatching(kIOUSBDeviceClassName);
因为我不想收到每个设备的通知,所以我不知道这是否是创建这个特定字典的正确方法。
我的完整代码如下所示:
ioKitNotificationPort = IONotificationPortCreate(kIOMasterPortDefault);
notificationRunLoopSource = IONotificationPortGetRunLoopSource(ioKitNotificationPort);
CFRunLoopAddSource(CFRunLoopGetCurrent(), notificationRunLoopSource, kCFRunLoopDefaultMode);
CFMutableDictionaryRef matchingDict = IOServiceMatching(kIOUSBDeviceClassName);
addMatchingNotificationResult = IOServiceAddMatchingNotification(ioKitNotificationPort,
kIOPublishNotification,
matchingDict,
deviceAdded,
NULL,
有谁知道为什么这不起作用?(注意:Callback 函数是一个静态的 void c 函数,其余的都封装在 Obj-C 类中)。
谢谢
Xcode 4、10.6.7