iOS监听手机锁屏状态

 更新时间:2017年05月03日 09:47:08   作者:bowei-iOS  
iPhone的锁屏监测分为两种方式监听,本文给大家介绍的非常详细,具体内容详情大家通过本文详细了解下吧

iPhone的锁屏监测分为两种方式监听:

1. 程序在前台,这种比较简单。直接使用Darwin层的通知就可以了:

#import <notify.h>
#define NotificationLock CFSTR("com.apple.springboard.lockcomplete")
#define NotificationChange CFSTR("com.apple.springboard.lockstate")
#define NotificationPwdUI CFSTR("com.apple.springboard.hasBlankedScreen")
static void screenLockStateChanged(CFNotificationCenterRef center,void* observer,CFStringRef name,const void*object,CFDictionaryRef userInfo)
{
  NSString* lockstate = (__bridge NSString*)name;
  if ([lockstate isEqualToString:(__bridge NSString*)NotificationLock]) {
    NSLog(@"locked.");
  } else {
    NSLog(@"lock state changed.");
  }
}
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
  // Override point for customization after application launch.
  CFNotificationCenterAddObserver(CFNotificationCenterGetDarwinNotifyCenter(), NULL, screenLockStateChanged, NotificationLock, NULL, CFNotificationSuspensionBehaviorDeliverImmediately);
  CFNotificationCenterAddObserver(CFNotificationCenterGetDarwinNotifyCenter(), NULL, screenLockStateChanged, NotificationChange, NULL, CFNotificationSuspensionBehaviorDeliverImmediately);
  //setScreenStateCb();
  return YES;
}

2. 第二种是程序退后台后,这时再锁屏就收不到上面的那个通知了,需要另外一种方式, 以循环的方式一直来检测是否是锁屏状态,会消耗性能并可能被苹果挂起(有可能没作用);

static void setScreenStateCb()
{
  
  uint64_t locked;
  __block int token = 0;
  notify_register_dispatch("com.apple.springboard.lockstate",&token,dispatch_get_main_queue(),^(int t){
  });
  notify_get_state(token, &locked);
  NSLog(@"%d",(int)locked);
}
- (void)applicationDidEnterBackground:(UIApplication *)application
{
  while (YES) {
    setScreenStateCb();
    sleep(1);
  }
}

以上所述是小编给大家介绍的iOS监听手机锁屏状态,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对脚本之家网站的支持!

相关文章

  • iOS使用核心动画和粒子发射器实现点赞按钮的方法

    iOS使用核心动画和粒子发射器实现点赞按钮的方法

    这篇文章主要给大家介绍了iOS如何使用核心动画和粒子发射器实现点赞按钮的方法,文中给出了详细的示例代码,相信对大家的理解和学习具有一定的参考借鉴,有需要的朋友们下面跟着小编一起来学习学习吧。
    2016-12-12
  • iOS实现简易抽屉效果、双边抽屉效果

    iOS实现简易抽屉效果、双边抽屉效果

    这篇文章主要为大家详细介绍了两款iOS抽屉效果,简易抽屉效果、以及双边抽屉效果,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2016-02-02
  • iOS中sqlite数据库的原生用法

    iOS中sqlite数据库的原生用法

    这篇文章主要为大家详细介绍了iOS中sqlite数据库的原生用法,sqlite数据库相信各位早已耳闻,非常轻巧的一个数据库,数据库仅一个文件,即建即用,感兴趣的小伙伴们可以参考一下3
    2016-05-05
  • iOS开发中UIImageView控件的常用操作整理

    iOS开发中UIImageView控件的常用操作整理

    这篇文章主要介绍了iOS开发中UIImageView控件的常用操作整理,代码基于传统的Objective-C,需要的朋友可以参考下
    2016-01-01
  • iOS开发之Quartz2D的介绍与使用详解

    iOS开发之Quartz2D的介绍与使用详解

    什么是Quartz2D?Quartz 2D是一个二维绘图引擎,同时支持iOS和Mac系统。下面这篇文章主要介绍了iOS开发之Quartz2D的介绍与使用的相关资料,需要的朋友可以参考下
    2017-03-03
  • iOS中关于Cookie验证登录状态

    iOS中关于Cookie验证登录状态

    这篇文章主要介绍了iOS中关于Cookie验证登录状态的相关资料,需要的朋友可以参考下
    2017-05-05
  • iOS撸一个简单路由Router的实现代码

    iOS撸一个简单路由Router的实现代码

    这篇文章主要介绍了iOS撸一个简单路由Router的实现代码,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2018-09-09
  • iOS中NSThread使用示例详解

    iOS中NSThread使用示例详解

    这篇文章主要为大家介绍了iOS中NSThread使用示例详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2022-10-10
  • iOS 多选删除功能附tableViewTips及单选删除

    iOS 多选删除功能附tableViewTips及单选删除

    这次分享并记录一下tableView的多选删除,并额外记录一下单选删除及tableView的设置小技巧。代码简单易懂,需要的朋友参考下吧
    2017-05-05
  • IOS 实现微信自动抢红包(非越狱IPhone)

    IOS 实现微信自动抢红包(非越狱IPhone)

    这篇文章主要介绍了IOS 实现微信自动抢红包(非越狱IPhone)的相关资料,这里对实现自动抢红包做一个详细的实现步骤,需要的朋友可以参考下
    2016-11-11

最新评论