測試環境: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