3

我试图检测用户何时锁定设备(例如按下主页按钮)。

发现这个

CFNotificationCenterAddObserver(CFNotificationCenterGetDarwinNotifyCenter(), //center
                                    NULL, // observer
                                    lockStateChanged, // callback
                                    CFSTR("com.apple.springboard.lockstate"), // event name
                                    NULL, // object
                                    CFNotificationSuspensionBehaviorDeliverImmediately);



static void lockStateChanged(CFNotificationCenterRef center, void *observer, CFStringRef name, const void *object, CFDictionaryRef userInfo) {
    NSLog(@"event received!");
    // you might try inspecting the `userInfo` dictionary, to see
    //  if it contains any useful info
    if (userInfo != nil) {
        CFShow(userInfo);
    }
}

我可以想象 com.apple.springboard.lockstate 就像调用私有 API?或者这样好吗?

4

1 回答 1

3

假设所有 CF... 功能都是公开的,您可能没问题,但肯定是在一个模糊的区域。如果 Apple 更改该字符串,iOS 的下一个版本可能会破坏您的代码。

在类似情况下,我为已批准的运输应用程序所做的是避免直接使用字符串。创建一个字符串数组,然后使用 NSString 方法将它们与句点分隔符组合起来,而不是直接使用 com.apple.springboard.lockstate。

YMMV

于 2013-05-19T13:29:15.030 回答