美文网首页
获取iOS的锁屏状态

获取iOS的锁屏状态

作者: 冰宫无凉 | 来源:发表于2018-08-23 11:09 被阅读212次
  1. 程序在前台,这种比较简单。直接使用Darwin层的通知就可以了:(但是这种方法,只能针对不上线的项目来使用,有可能被拒。在17年的时间这个API变成私有的了)
#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:(__bridgeNSString*)NotificationLock]) {

//如果想做在这里面做一些操作的话,可以用通知来和OC语言来做交互

 NSLog(@"locked.");

 } else {

     // 此处监听到屏幕解锁事件(锁屏也会掉用此处一次,锁屏事件要在上面实现)

 NSLog(@"lock state changed.");

 }

}

添加通知

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions

{

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

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

   return YES;

}

2: 还有一种黑客的做法是调节屏幕的亮度,直接上代码

-(void)applicationDidEnterBackground:(NSNotification*)notification  {

    if ([self didUserPressLockButton]) {

        //User pressed lock button

        NSLog(@"Lock screen.");

    }else{

        NSLog(@"Home.");

        //user pressed home button

    }

}

-(BOOL)didUserPressLockButton{

    //获取屏幕亮度

    CGFloat oldBrightness = [UIScreen mainScreen].brightness;

    //以较小的数量改变屏幕亮度

    [UIScreenmainScreen].brightness= oldBrightness + (oldBrightness <=0.01? (0.01) : (-0.01));

    CGFloatnewBrightness  = [UIScreen mainScreen].brightness;

    //恢复屏幕亮度

    [UIScreen mainScreen].brightness = oldBrightness;

    //判断屏幕亮度是否能够被改变

    returnoldBrightness != newBrightness;

}

当用户离开通过锁定按钮而不是主页按钮时,苹果只允许你从applicationDidEnterBackground更改屏幕亮度。这种方法是当APP进入后台时, 以较小的数量改变屏幕亮度,并检查是否能够更改。如果能够更改便是锁定按钮,不能则是主页按钮。经过检测这种方法是可行的,这里讲的是监听锁屏,这个方法同样也可以监听解锁,小编开发的功能是有定时器的,每隔一秒就会执行下didUserPressLockButton这个方法,解锁的时候会同样执行锁屏的语句。

另外网上还有一种方法是通过检测屏幕亮度来判断是锁屏还是按了home键,这种方法是不可以的,因为锁屏之后屏幕的亮度并不为0。

相关文章

网友评论

      本文标题:获取iOS的锁屏状态

      本文链接:https://www.haomeiwen.com/subject/vqepiftx.html