本篇文章主要介绍了iOS录屏和截屏监听的实现代码,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
最近在做项目安全性方面的工作,需要在APP内敏感页面做防用户截屏录屏的功能,就在网上查阅了一些资料,在这里做个笔记,方便日后查找。
截屏状态获取
编辑相册中最新照片的方法iOS8之后就已经失效,框架“Photos”也在iOS10之后失效。
搜索发现UIApplication中仅有用户截屏后的通知,应用中只会收到已经截屏的通知并没办法干预。
// This notification is posted after the user takes a screenshot (for example by pressing both the home and lock screen buttons)
UIKIT_EXTERN NSNotificationName const UIApplicationUserDidTakeScreenshotNotification NS_AVAILABLE_IOS(7_0);
虽然无法直接干预,但可以知道用户截屏了就可以用其它的方式来限制用户的行为或者弹出提示告诉用户。
-(void)viewDidAppear:(BOOL)animated{
[super viewDidAppear:animated];
[[NSNotificationCenter defaultCenter]addObserver:self selector:@selector(screenshots) name:UIApplicationUserDidTakeScreenshotNotification object:nil];
}
-(void)screenshots
{
UIAlertView *alert1 = [[UIAlertView alloc] initWithTitle:nil message:@"[安全提醒]内含个人资金账户。不要截图,录制或分享给他人以保障资金账户安全。" delegate:nil cancelButtonTitle:nil otherButtonTitles:@"确定", nil];
[alert1 show];
-(void)dealloc
{
[[NSNotificationCenter defaultCenter] removeObserver:self name:UIApplicationUserDidTakeScreenshotNotification object:nil];
}
录屏状态获取
iOS 11 SDK 中新增了UIScreen的API用以告知应用当前屏幕正在录屏。当UIScreen.isCaptured 为true时,表示当前屏幕正在被录制、镜像或被Airplay 发送。
当录屏状态发生变化时,UIKit会发送UIScreenCapturedDidChange的notification。
基于此,我们可以在应用中接收此通知,来对用户的录屏行为做相应的处理
-(void)viewWillAppear:(BOOL)animated{
[super viewWillAppear:animated];
//监测当前设备是否处于录屏状态
UIScreen * sc = [UIScreen mainScreen];
if (@available(iOS 11.0, *)) {
if (sc.isCaptured) {
NSLog(@"正在录制~~~~~~~~~%d",sc.isCaptured);
[self screenshots];
}
} else {
// Fallback on earlier versions
}
if (@available(iOS 11.0, *)) {
//检测到当前设备录屏状态发生变化
[[NSNotificationCenter defaultCenter]addObserver:self selector:@selector(screenshots) name:UIScreenCapturedDidChangeNotification object:nil];
} else {
// Fallback on earlier versions
}
}
-(void) screenshots
{
UIAlertView *alert1 = [[UIAlertView alloc] initWithTitle:nil message:@"[安全提醒]内含个人资金账户。不要截图,录制或分享给他人以保障资金账户安全。" delegate:nil cancelButtonTitle:nil otherButtonTitles:@"确定", nil];
[alert1 show];
-(void)dealloc
{
if (@available(iOS 11.0, *)) {
[[NSNotificationCenter defaultCenter] removeObserver:self name:UIScreenCapturedDidChangeNotification object:nil];
} else {
// Fallback on earlier versions
}
}
上述监测录屏状态只是在iOS11之后,而且只是单单的检测到录屏状态并且没有办法去关闭录屏状态或者修改录制到的内容,至于在iOS11之前的录屏手段的监测暂时还没查到,有哪位大神知道的话麻烦告知小弟,在此谢过。
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持编程学习网。
本文标题为:iOS录屏和截屏监听的实现代码
基础教程推荐
- Android多返回栈技术 2023-04-15
- android studio按钮监听的5种方法实例详解 2023-01-12
- Flutter绘图组件之CustomPaint使用详解 2023-05-12
- Android开发使用RecyclerView添加点击事件实例详解 2023-06-15
- IOS应用内跳转系统设置相关界面的方法 2022-11-20
- 解决Android Studio突然不显示logcat日志的问题 2023-02-04
- iOS开发教程之XLForm的基本使用方法 2023-05-01
- Android中的webview监听每次URL变化实例 2023-01-23
- IOS 播放系统提示音使用总结(AudioToolbox) 2023-03-01
- Flutter手势密码的实现示例(附demo) 2023-04-11
