1. 導(dǎo)入頭文件
#import <notify.h>
2. 給 CFNotificationCenter
添加觀察者
- (void)addLockStatusObserver {
CFNotificationCenterAddObserver(
CFNotificationCenterGetDarwinNotifyCenter(),
NULL,
onLockStatusChange,
LockStatusChangeNotiName,
NULL,
CFNotificationSuspensionBehaviorDeliverImmediately);
CFNotificationCenterAddObserver(
CFNotificationCenterGetDarwinNotifyCenter(),
NULL,
onLockStatusChange,
LockStatusLockedNotiName,
NULL,
CFNotificationSuspensionBehaviorDeliverImmediately);
}
通知觸發(fā)的回調(diào) CFNotificationCallback
:
void onLockStatusChange(
CFNotificationCenterRef center,
void *observer,
CFStringRef name,
const void *object,
CFDictionaryRef userInfo) {
NSString *notiName = (__bridge NSString *)(name);
if ([notiName isEqualToString:@"com.apple.springboard.lockstate"]) {
// 無論鎖定還是解鎖,都會觸發(fā)士败。鎖定時鲤屡,在 `lockcomplete` 之前觸發(fā)
NSLog(@"屏幕鎖狀態(tài)改變");
} else if ([notiName isEqualToString:@"com.apple.springboard.lockcomplete"]) {
// 鎖定時觸發(fā)
NSLog(@"屏幕鎖定");
}
}
3. 別忘記移除觀察者了
- (void)removeLockStatusOberser {
CFNotificationCenterRemoveObserver(
CFNotificationCenterGetDarwinNotifyCenter(),
NULL,
LockStatusChangeNotiName,
NULL);
CFNotificationCenterRemoveObserver(
CFNotificationCenterGetDarwinNotifyCenter(),
NULL,
LockStatusLockedNotiName,
NULL);
}
進一步了解:
官方文檔 CFNotificationCenter