定义两个宏:
//监听锁屏事件
#define kNotificationLock CFSTR("com.apple.springboard.lockcomplete")
//监听屏幕状态变化事件
#define kNotificationChange CFSTR("com.apple.springboard.lockstate")
注册达尔文通知:
注意此处CFNotificationCenterAddObserver() 为C的函数,其第三个参数需要传一个回调函数
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions{
//监听锁屏事件
CFNotificationCenterAddObserver(CFNotificationCenterGetDarwinNotifyCenter(), NULL, screenLockStateChanged, kNotificationLock, NULL, CFNotificationSuspensionBehaviorDeliverImmediately);
//监听屏幕状态变化事件
CFNotificationCenterAddObserver(CFNotificationCenterGetDarwinNotifyCenter(), NULL, screenLockStateChanged, kNotificationChange, NULL, CFNotificationSuspensionBehaviorDeliverImmediately);
return YES;
}
定义一个全局变量stateChaned,用来判断屏幕变化的状态
@property (nonatomic, assign)BOOL stateChanged;
定义AppDelegate的单例,以便在回调函数中调用stateChanged
//定义AppDelegate单例
+ (AppDelegate *)sharedDelegate{
return (AppDelegate *)[UIApplication sharedApplication].delegate;
}
实现通知回调函数:
static void screenLockStateChanged(CFNotificationCenterRef center,void* observer,CFStringRef name,const void* object,CFDictionaryRef userInfo){
NSString* lockstate = (__bridge NSString*)name;
if ([lockstate isEqualToString:(__bridge NSString*)kNotificationLock]) {
[AppDelegate sharedDelegate].stateChanged = YES;
NSLog(@"锁屏");
}
else{
if ([AppDelegate sharedDelegate].stateChanged) {
[AppDelegate sharedDelegate].stateChanged = NO;
}else{
NSLog(@"解锁");
}
}
}