天天看點

iOS 判斷螢幕是否鎖屏

測試環境:iOS6.1 device:iphone5

擷取鎖屏方式區分為2種方式:

第一種(需越獄):

if ([[objc_getClass("SBAwayController") sharedAwayController] isLocked]) {
        NSLog(@"double check Home ,now YES Lock");
   } else{
        NSLog(@"double check Home ,now NO Lock");
   }           

這是copy的sina部落格的。

第二種:

我們知道鎖屏和解鎖的時候,iOS系統會發送通知,根據搜尋,大概有下面3種通知:

com.apple.iokit.hid.displayStatus

該通知系統日志會列印出來: Apr 27 14:50:47 Administratorteki-iPad backboardd[69] <Notice>: Posting 'com.apple.iokit.hid.displayStatus' notifyState=0

具體分析就是鎖屏後通知會發出消息,在螢幕變亮後,沒有滑動解鎖,系統也會發出該通知

com.apple.springboard.lockstate

該通知在系統鎖屏和滑動解鎖後,會發出該通知

com.apple.springboard.lockcomplete

對鎖屏狀态的擷取,第一種方式是比較合适和簡單的,如果想根據通知來擷取,同樣可以,代碼如下:

CFNotificationCenterAddObserver(CFNotificationCenterGetDarwinNotifyCenter(), NULL, updateEnabled, CFSTR("com.apple.iokit.hid.displayStatus"), NULL, CFNotificationSuspensionBehaviorDeliverImmediately);           
static void updateEnabled(CFNotificationCenterRef center, void* observer, CFStringRef name, const void* object, CFDictionaryRef userInfo) {
    uint64_t state;
    int token;
    notify_register_check("com.apple.iokit.hid.displayStatus", &token);
    notify_get_state(token, &state);
    notify_cancel(token);
    NSLog(@"%llu",state);
}           

state 的值就是鎖屏的狀态值。

0:鎖屏

1:解鎖

轉載自:http://blog.csdn.net/feng3327/article/details/8859478