判断iOS如何监听手机屏幕是否锁屏

需求:监听手机是否锁屏,开屏。两种状态。

该方法不是私有api。

通过iOS的文件保护机制。使用观察者监听UIApplicationProtectedDataWillBecomeUnavailable和UIApplicationProtectedDataDidBecomeAvailable这两个键。并在app中写一个文件,文件内容随意。

1、 创建一个文件保存到沙盒。

ini 复制代码
- (void)createProtectedFile {
    NSString *doc = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES).firstObject;
    NSString *path = [doc stringByAppendingPathComponent:@"pd_test"];
    NSDictionary *attr = @{ NSFileProtectionKey : NSFileProtectionComplete };
    NSData *data = [@"1" dataUsingEncoding:NSUTF8StringEncoding];
    [[NSFileManager defaultManager] createFileAtPath:path contents:data attributes:attr];
}

2、使用观察者添加监听

objectivec 复制代码
- (void)addObserverForLock() {
    [[NSNotificationCenter defaultCenter] addObserver:self
         selector:@selector(deviceLocked)
         name:UIApplicationProtectedDataWillBecomeUnavailable
         object:nil];

    // 监听解锁
    [[NSNotificationCenter defaultCenter] addObserver:self
         selector:@selector(deviceUnlocked)
         name:UIApplicationProtectedDataDidBecomeAvailable
         object:nil];
} 

- (void)deviceLocked {
    NSLog(@"设备锁屏了");
    self.isLock = YES;
}

- (void)deviceUnlocked {
    NSLog(@"设备解锁了");
    self.isLock = NO;
}

3、并在你的页面viewDidLoad中添加这两段代码

ini 复制代码
[self createProtectedFile];
[self addObserverForLock];

至此 就可以知道手机是否触发锁屏和解锁了。

相关推荐
敲代码的鱼21 小时前
PDF 预览与签名批注写回 支持安卓 iOS 鸿蒙 UTS插件
android·前端·ios
时光足迹1 天前
uni-app 视频通话实战:康复师与患者视频问诊的 6 个致命 Bug 与解决方案
android·ios·uni-app
时光足迹1 天前
JPush UniApp UTS 插件完全参考手册:API、事件与厂商通道一网打尽
vue.js·ios·uni-app
时光足迹1 天前
极光推送全攻略(下):uni-app 代码实现与 iOS 排查实战
vue.js·ios·uni-app
时光足迹1 天前
极光推送全攻略(上):被iOS证书折磨了三天,我写了一份前端也能看懂的避坑指南
前端·ios·uni-app
编程范式2 天前
SwiftUI 中图片如何适配可用空间
ios
songgeb4 天前
启发式 UI 自动化:从线性剧本到每步读屏决策
ios·测试
壹方秘境8 天前
我用Go语言开发了一个跨平台的HTTPS抓包和调试工具
前端·后端·ios
初级代码游戏13 天前
easy Photo Clean公测版:快速清理iPhone照片 邀请公测
ios·iphone