你可以使用
Darwin notifications来监听事件。我不确定,但在越狱的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!");
if (userInfo != nil) {
CFShow(userInfo);
}
}
如果你真的想让这段代码作为一个“服务”在后台运行,并且你已经越狱了,我建议你研究一下
iOS Launch Daemons。与你只是让应用程序在后台运行不同,启动守护进程可以在重新启动后自动启动,而且你不必担心iOS规则限制应用程序在后台运行任务。请告诉我们这个方法是否有效!