您可以使用Darwin 通知来监听事件。我不是 100% 确定,但在我看来,在越狱的 iOS 5.0.1 iPhone 4 上运行,这些事件之一可能是你需要的:
com.apple.iokit.hid.displayStatus
com.apple.springboard.hasBlankedScreen
com.apple.springboard.lockstate
更新:此外,当手机锁定(但不是解锁时)时会发布以下通知:
com.apple.springboard.lockcomplete
要使用它,请像这样注册事件(这仅注册一个事件,但如果这对您不起作用,请尝试其他事件):
CFNotificationCenterAddObserver(CFNotificationCenterGetDarwinNotifyCenter(), //center
NULL, // observer
displayStatusChanged, // callback
CFSTR("com.apple.iokit.hid.displayStatus"), // event name
NULL, // object
CFNotificationSuspensionBehaviorDeliverImmediately);
displayStatusChanged
您的事件回调在哪里:
static void displayStatusChanged(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);
}
}
如果您真的希望此代码作为服务在后台运行,并且您已越狱,我建议您查看iOS Launch Daemons。与您简单地在后台运行的应用程序相反,启动守护程序可以在重新启动后自动启动,您不必担心应用程序在后台运行任务的 iOS 规则。
让我们知道这是如何工作的!