Вы можете использовать Дарвинские уведомления , чтобы прослушивать события. Из моего тестирования на взломанном iOS 5.0.1 iPhone 4 я думаю, что одним из этих событий может быть то, что вам нужно:
com.apple.springboard.lockstate
com.apple.springboard.lockcomplete
Примечание: в соответствии с комментариями автора к аналогичному вопросу, на который я ответил здесь , это также должно работать на не взломанном телефоне.
Чтобы использовать это, зарегистрируйтесь для участия в таком событии (это относится только к первому событию, указанному выше, но вы также можете добавить наблюдателя и для lockcomplete
):
CFNotificationCenterAddObserver(CFNotificationCenterGetDarwinNotifyCenter(), //center
(void*)self, // observer (can be NULL)
lockStateChanged, // callback
CFSTR("com.apple.springboard.lockstate"), // event name
NULL, // object
CFNotificationSuspensionBehaviorDeliverImmediately);
, где lockStateChanged
- обратный вызов вашего события:
static void lockStateChanged(CFNotificationCenterRef center, void *observer, CFStringRef name, const void *object, CFDictionaryRef userInfo) {
NSLog(@"event received!");
if (observer != NULL) {
MyClass *this = (MyClass*)observer;
}
// you might try inspecting the `userInfo` dictionary, to see
// if it contains any useful info
if (userInfo != nil) {
CFShow(userInfo);
}
}
Событие lockstate
наступает, когда устройство заблокировано и разблокировано, но событие lockcomplete
запускается только при блокировке устройства. Другой способ определить, относится ли это событие к событию блокировки или разблокировки, - использовать notify_get_state()
. Вы получите другое значение для блокировки против разблокировки, , как описано здесь .