【发布时间】:2018-11-22 07:09:10
【问题描述】:
我尝试检测 iOS 11 的应用程序是否开启了屏幕捕获,为了检测这一点,UIScreen.mainScreen.isCaptured 属性用于检查它是否被记录。
它在第一次启动时运行良好,当应用程序被终止并再次启动时,尽管屏幕捕获已打开,但 API 返回 NO。
代码:
//In viewWillAppear block
__block ViewController *weakSelf = self;
[NSTimer scheduledTimerWithTimeInterval:2.0 repeats:YES block:^(NSTimer * _Nonnull timer) {
[weakSelf screenCaptureDetection];
}];
- (void) screenCaptureDetection {
if (@available(iOS 11.0, *)) {
for (UIScreen *screen in [UIScreen screens]) {
if([screen performSelector:@selector(isCaptured)]){
//Detected YES
}
}
}
用例场景:
- 启动应用程序
- 使用苹果屏幕录制选项启动屏幕录制器
- 检测到屏幕录像机
- 终止应用
- 重复步骤 1 和 2
- 未检测到录屏,API
UIScreen.mainScreen.isCaptured返回NO
请推荐
【问题讨论】:
-
如果可以重现,您是否考虑过提交bugreport?
-
是的,它是可重现的
-
仅供参考,除非您仍在使用 MRR,否则您应该使用
__weak而不是__block。使用 ARC 时,__block变量仍由块保留。此外,__weak为您提供归零弱参考,这可能是您正在寻找的。span> -
@Lukas 我会做出改变的
标签: ios objective-c uiscreen