判断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];

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

相关推荐
sakiko_4 小时前
Swift学习笔记42-SwiftUI的属性包装器(讲解+面试)
笔记·学习·ios·swiftui·swift
Patrick_Wilson12 小时前
iOS Safari 按钮点击无响应问题修复指南
前端·ios·safari
随遇丿而安13 小时前
第 3 周:UIButton 点了没反应,因为它默认就没有按压态
ios
思盛iOS签名上架1 天前
App苹果签名有什么作用?
macos·ios·cocoa
CocoaKier1 天前
Facebook广告后台收不到Adjust回传数据,我们排查了一个月终于找到了根因
ios·facebook
FairGuard手游加固2 天前
iOS 游戏加固技术解析:代码混淆、资源加密、内存保护与重签名检测
安全·游戏·macos·unity·ios·objective-c
思盛iOS签名上架2 天前
iOS企业签名原理是什么?
macos·ios·cocoa
Daniel_Coder2 天前
我用 SwiftUI + GRDB 做了一个「按时吃药·服药提醒」App
ios·swiftui·swift·widgetkit
Patrick_Wilson3 天前
iOS 第三方浏览器图片下载失败问题
前端·ios·浏览器