2

当某个进程开始使用相机时,我需要接收一个事件。我通过 CMIOObjectGetPropertyData 做到了这一点。但它不能正常工作,正确的值只有第一次访问。

我也尝试使用 CMIOObjectAddPropertyListenerBlock 但他没有从我这里工作。请告诉我,我做错了什么?我将不胜感激。

while (1)
{
    UInt32 value = 0;
    UInt32 valuePropertySize = sizeof(flag);
    CMIOObjectPropertyAddress opa = {kCMIODevicePropertyDeviceIsRunningSomewhere,
        kAudioObjectPropertyScopeWildcard, kAudioObjectPropertyElementMaster};

    OSStatus result = CMIOObjectGetPropertyData(device, &opa, 0, NULL, sizeof(UInt32), &valuePropertySize, &value);
    NSLog(@"%d : %d", result, value);
    sleep(1);
}
4

1 回答 1

1

我也有同样的问题。获取数据CMIOObjectGetPropertyData工作,但注册一个CMIOObjectAddPropertyListenerBlock从未收到任何事件的侦听器块。

该问题的解决方案与 CMIO* 代码完全无关。基本上,我忘了启动运行循环,这阻止了接收事件。

请看这里:currentRunLoop

添加一个简单[[NSRunLoop currentRunLoop] run];的为我解决了这个问题

于 2017-07-08T14:21:30.030 回答