iOS 监听锁屏/解锁事件

//监听锁屏事件

#define kNotificationLock CFSTR("com.apple.springboard.lockcomplete")

//监听屏幕状态变化事件

#define kNotificationChange CFSTR("com.apple.springboard.lockstate")

didFinishLaunchingWithOptions()中监听:

//监听锁屏事件  

CFNotificationCenterAddObserver(CFNotificationCenterGetDarwinNotifyCenter(), NULL, screenLockStateChanged, kNotificationLock, NULL, CFNotificationSuspensionBehaviorDeliverImmediately);  

//监听屏幕状态变化事件  

CFNotificationCenterAddObserver(CFNotificationCenterGetDarwinNotifyCenter(), NULL, screenLockStateChanged, kNotificationChange, NULL, CFNotificationSuspensionBehaviorDeliverImmediately);

定义一个全局变量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(@"解锁");
        }
    }
    
}


猜你喜欢

转载自blog.csdn.net/quantum7/article/details/80676986
今日推荐