首页 > 其他分享 >iOS锁屏事件监听

iOS锁屏事件监听

时间:2023-07-13 21:47:10浏览次数:41  
标签:name iOS void NSLog 锁屏 selector 监听

私有API (慎用 不上appstore的话就可以用)

//AppDelegate.m
//监听锁屏事件
#define kNotificationLock CFSTR("com.apple.springboard.lockcomplete")
//监听屏幕状态变化事件
#define kNotificationChange CFSTR("com.apple.springboard.lockstate")

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

    //监听锁屏事件
    CFNotificationCenterAddObserver(CFNotificationCenterGetDarwinNotifyCenter(), NULL, screenLockStateChanged, kNotificationLock, NULL, CFNotificationSuspensionBehaviorDeliverImmediately);
    //监听屏幕状态变化事件
    CFNotificationCenterAddObserver(CFNotificationCenterGetDarwinNotifyCenter(), NULL, screenLockStateChanged, kNotificationChange, NULL, CFNotificationSuspensionBehaviorDeliverImmediately);

    return YES;
}

static void screenLockStateChanged(CFNotificationCenterRef center,void* observer,CFStringRef name,const void* object,CFDictionaryRef userInfo){
    
    NSString* lockstate = (__bridge NSString*)name;
    if ([lockstate isEqualToString:(__bridge  NSString*)kNotificationLock]) {
        NSLog(@"锁屏");
    }
    else{
        NSLog(@"解锁");
    }
    
}

红外线传感器判断是否息屏

//传感器(红外感应)打开 打开才能监听 适当的时机去关闭就ok
    [[UIDevice currentDevice] setProximityMonitoringEnabled:YES];
    //设置监听
    [[NSNotificationCenter defaultCenter] addObserver:self
                                                 selector:@selector(sensorStateChange:)
                                                     name:UIDeviceProximityStateDidChangeNotification
                                                   object:nil];

- (void)sensorStateChange:(NSNotificationCenter *)notification {
    if ([[UIDevice currentDevice] proximityState] == YES) {
        NSLog(@"熄屏");
    }else{
        NSLog(@"亮屏");
    }
}

App不熄屏设置 适用于直播等长时间在activity的场景

[[UIApplication sharedApplication] setIdleTimerDisabled:YES];

网上说监听这两个通知可以监听到锁屏和解锁的回调, 实际上聊胜于无 (屁都没有)

UIApplicationProtectedDataWillBecomeUnavailable
UIApplicationProtectedDataDidBecomeAvailable

    [[NSNotificationCenter defaultCenter] addObserver:self
                                             selector:@selector(LOCK_SCREEN:)
                                                 name:UIApplicationProtectedDataWillBecomeUnavailable
                                               object:nil];
     
     [[NSNotificationCenter defaultCenter] addObserver:self
                                              selector:@selector(UN_LOCK_SCREEN:)
                                                  name:UIApplicationProtectedDataDidBecomeAvailable
                                                object:nil];

看似可行的方案 实则也不行

标签:name,iOS,void,NSLog,锁屏,selector,监听
From: https://www.cnblogs.com/wgb1234/p/17552278.html

相关文章

  • Vue3+Vue-Router+TypeScript+Vite+Element-Plus+Axios+Pinia快速搭建开发框架
    1、环境准备(1)首先你得需要安装node和npm2、环境初始化(1)先随意找个文件夹,初始化vite#安装pnpmnpmi-gpnpm#初始化vitepnpmcreatevite#安装依赖pnpminstall(2)最后我们执行pnpmrundev3、安装插件(1)Eslint校验代码工具安装eslint#安装eslint......
  • 对目标元素进行监听 - addListener和IntersectionObserver
    在web的构建中,经常需要对元素进行监听,例如监听元素是否出现在可视范围内。我们可以通过addEventListener来监听滚动,计算元素距离顶部的位置对元素的变更来做出反应。但是长时间大量的触发事件反而对网页性能影响很大,使用节流的话其实也只是浅浅的优化一下性能。有没有其他思路可......
  • 如何实现正则表达式 ios兼容的具体操作步骤
    正则表达式iOS兼容性正则表达式是用于匹配和操作字符串的强大工具。在iOS开发中,我们经常需要使用正则表达式来验证、解析和转换字符串。然而,不同版本的iOS系统对正则表达式的支持有所不同。本文将介绍如何在iOS中使用正则表达式,并解释其兼容性问题。正则表达式基础正则表达式是......
  • 如何实现ios电脑模拟器的具体操作步骤
    iOS电脑模拟器在开发iOS应用程序时,我们通常需要在真实设备上进行测试和调试。然而,有时我们可能没有设备可用,或者我们希望在不同的iOS版本上进行测试,这时就需要使用iOS电脑模拟器了。什么是iOS电脑模拟器iOS电脑模拟器是一种可以在Mac电脑上运行的虚拟设备,它模拟了真实iOS设备的......
  • ios怎么截长图 来解决一个具体问题的方案
    iOS如何截取长图在日常使用iOS设备时,经常会遇到需要截取长图的情况,比如截取网页、聊天记录等。然而,iOS系统默认的截图功能只能截取当前可见区域的屏幕内容,无法满足我们的需求。本文将介绍一种解决方案,通过编写代码来实现iOS设备的长图截取功能。解决方案要实现iOS设备的长图截取......
  • 如何实现主板刷bios的具体操作步骤
    实现主板刷BIOS的流程步骤概览步骤操作1准备刷写工具和BIOS固件2连接主板和计算机3进入BIOS设置4进行BIOS刷新5完成BIOS刷新详细步骤及代码解释1.准备刷写工具和BIOS固件首先,我们需要准备好用于刷写BIOS的工具和最新的BIOS固件。确保你已经从主......
  • 解决微星进bios的具体操作步骤
    如何实现微星进bios简介在开发过程中,有时需要通过编程的方式实现微星进bios的操作。本文将介绍一种基本的实现方式,并提供详细的步骤和代码示例。流程概述实现微星进bios的基本流程如下:步骤操作1打开微星主板电源2进入微星主板设置界面3找到“进入BIOS”选项......
  • 解决curios的具体操作步骤
    Curios-一个有趣的Python库![Curios](Curios是一个有趣的Python库,它为我们提供了一种简单而强大的方式来探索和发现一些有趣的事物。无论是数学、科学、历史,还是文化,Curios都可以帮助我们解开其中的谜团。Curios的安装非常简单,只需在终端中运行以下命令:pipinstallcurios......
  • 从 0 开发一款 iOS App
    你将获得1.熟练使用UI组件搭建App界面;2.掌握iOS开发关键技术模块;3.构建系统的移动开发知识体系;4.具体独立开发完整App的能力。课程介绍使用Objective-C语言,符合国内iOS开发的主流标准;基于最新的iOS12进行讲解,不传授过时的知识;立足于工程化开发实战,从一个空白......
  • Signal-iOS 5.9.0编译问题
    1.当我们使用pod管理  pod'SDWebImage/WebP' ,执行podinstall时,发生报错.先看具体报错: 截屏2020-07-06上午11.12.15.png2.报错产生原因是由于gitclone 的地址是 https://chromium.googlesource.com/webm/libwebp,需要FQ3.不想FQ,可以使用github上的地址......