iOS_获取&区分iOS锁屏与Home事件

今天在研究获取是否锁屏状态,没找到方法。有找到的说要越狱,没越狱的方法又只能获取到响应通知,不能识别是锁还是解。无意间看到这么个文章,测试了一下真机可以运行就收藏留着后面备用吧!(测试环境:iPhone5s)

原文来自:http://wangqingpeng.info/blog/2013/11/04/huo-qu-and-qu-fen-iossuo-ping-yu-homeshi-jian/

[objc]  view plain copy print ?
  1. //put this in - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions  
  2. CFNotificationCenterAddObserver(CFNotificationCenterGetDarwinNotifyCenter(),  
  3.                                     NULL,  
  4.                                     displayStatusChanged,  
  5.                                     CFSTR("com.apple.springboard.lockcomplete"),  
  6.                                     NULL,  
  7.                                     CFNotificationSuspensionBehaviorDeliverImmediately);  
  8.   
  9. //put this function in AppDelegate  
  10. static void displayStatusChanged(CFNotificationCenterRef center,  
  11.                                  voidvoid *observer,  
  12.                                  CFStringRef name,  
  13.                                  const voidvoid *object,  
  14.                                  CFDictionaryRef userInfo) {  
  15.     if (name == CFSTR("com.apple.springboard.lockcomplete")) {  
  16.         [[NSUserDefaults standardUserDefaults] setBool:YES forKey:@"kDisplayStatusLocked"];  
  17.         [[NSUserDefaults standardUserDefaults] synchronize];  
  18.     }  
  19. }  
  20.   
  21. //put this in onAppEnterBackground  
  22. UIApplicationState state = [[UIApplication sharedApplication] applicationState];  
  23.     if (state == UIApplicationStateInactive) {  
  24.         NSLog(@"Sent to background by locking screen");  
  25.     } else if (state == UIApplicationStateBackground) {  
  26.         if (![[NSUserDefaults standardUserDefaults] boolForKey:@"kDisplayStatusLocked"]) {  
  27.             NSLog(@"Sent to background by home button/switching to other app");  
  28.         } else {  
  29.             NSLog(@"Sent to background by locking screen");  
  30.         }  
  31.     }  
  32.   
  33. //put this in - (void)applicationWillEnterForeground:(UIApplication *)application  
  34. [[NSUserDefaults standardUserDefaults] setBool:NO forKey:@"kDisplayStatusLocked"];  
  35. [[NSUserDefaults standardUserDefaults] synchronize];  

上面那个只能响应锁屏、点击home键进入后台。


以下是自己综合网上的写出来的方法。

原文参考:http://blog.csdn.net/feng3327/article/details/8859478

通知方式判断解锁/锁屏:目前我只能在运行当前demo的时候响应通知,不能获取到状态,初步考虑是认为加入bool判断(因为,我觉得锁屏、解锁跟开关值是一个意思)。废话有点多,先上代码:

[html]  view plain copy print ?
  1. //这段写在:- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions  
  2.     CFNotificationCenterAddObserver(CFNotificationCenterGetDarwinNotifyCenter(), NULL, updateEnabled, CFSTR("com.apple.iokit.hid.displayStatus"), NULL, CFNotificationSuspensionBehaviorDeliverImmediately);  
[html]  view plain copy print ?
  1. //这段写在:AppDelegate 下  
  2. static void updateEnabled(CFNotificationCenterRef center, void* observer, CFStringRef name, const void* object, CFDictionaryRef userInfo) {  
  3.     NSLog(@"锁屏/解锁");  
  4. }  
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值