如何理解IOS 11中是否记录了设备屏幕

我有一个应用程序,它有受版权保护的内容。 我不希望用户录制它。 如果他们开始录制屏幕我希望我的应用程序能够抓住这个。 如果正在录制屏幕,捕获的function是什么?

我不想阻止,我想了解并抓住它。

注意:一些答案表明包括AirPlay和镜像在内的解决方案。 我想要的是只捕捉在app之前或期间开始的屏幕录制。 我想允许用户使用AirPlay和Mirroring。

您可以检查是否正在录制屏幕

UIScreen.main.isCaptured 

如果通过AirPlay记录,镜像或发送屏幕,则isCaptured将为true。

我添加了一张检查,看看是否是镜像; 如果没有,我会发出警报。 暂时解决了我的问题。 这不是一个完美的解决方案,并不能解决所有问题,而只是迈出了一步

 if (@available(iOS 11.0, *)) { [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(handleScreenCaptureChange) name:UIScreenCapturedDidChangeNotification object:nil]; } -(void)handleScreenCaptureChange { UIScreen *aScreen; BOOL isMainScreenMirrored = NO; NSArray *screens = [UIScreen screens]; for (aScreen in screens) { if ([aScreen respondsToSelector:@selector(mirroredScreen)] && [aScreen mirroredScreen] == [UIScreen mainScreen]) { // The main screen is being mirrored. isMainScreenMirrored = YES; } } if (@available(iOS 11.0, *)) { BOOL isCaptured = [[UIScreen mainScreen] isCaptured]; if (isCaptured && !isMainScreenMirrored) { //Display Alert : "Please turn off screen recording and play again." } } } 

您还可以通过收听UIApplicationUserDidTakeScreenshotNotification来检测用户是否已截屏。

您可以使用以下方式 –

 let main = OperationQueue.main NotificationCenter.default.addObserver(forName: NSNotification.Name.UIApplicationUserDidTakeScreenshot, object: nil, queue: mainQueue, using: { notification in // Warn user }) 

 UIScreen.main.isCaptured 

这也可以用于检测录音。 我没有用过这个,但大多数情况下你必须为此做KVO。

检查屏幕是否正在录制(对于Objective C)

将以下代码放在您的应用程序委托上,并完成启动并确实变为活动状态。

BOOL isCaptured = [[UIScreen mainScreen] isCaptured];

使用UIScreen.main.isCaptured获取当前状态。 比,你需要听新的通知UIScreenCapturedDidChangeNotification。 录制状态将发生变化时,您需要执行一些操作(例如停止播放..等等)。 请记住,这只是iOS11 +。

代码片段:

 if (@available(iOS 11.0, *)) { [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(capturedChange) name:UIScreenCapturedDidChangeNotification object:nil]; } - (void)capturedChange { if (@available(iOS 11.0, *)) { NSLog(@"Recording Status: %s", [UIScreen mainScreen].isCaptured ? "true" : "false"); //do something } }