如果 App 在后台,iOS 会检测屏幕截图

Posted

技术标签:

【中文标题】如果 App 在后台,iOS 会检测屏幕截图【英文标题】:iOS detect Screenshot if App is in background 【发布时间】:2015-02-16 09:34:04 【问题描述】:

我是 Xcode 和 Objective-C 的新手,所以我需要你的帮助。 如果此应用程序在后台,我不希望有一个应用程序检测屏幕截图,例如您按下主页按钮,所以您在主屏幕上,如果您现在截取屏幕截图,我希望该应用程序显示警报在主屏幕上。 我试试这个:

在我的 AppDelegate.m 中

- (void)applicationDidEnterBackground:(UIApplication *)application 
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(userDidTakeScreenshot:) name:UIApplicationUserDidTakeScreenshotNotification object:nil];


- (void)userDidTakeScreenshot:(NSNotification *)notification
    NSLog(@"screenshot detected");

    UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"Message" message:@"screenshot detected" delegate:self cancelButtonTitle:@"OK" otherButtonTitles:@"nil];
    [alert show];

但如果应用程序进入后台,然后我截取屏幕截图,则警报不会显示。 我希望你能理解我的问题。

我原谅我的英语。

【问题讨论】:

UIApplicationUserDidTakeScreenshotNotification 在后台工作? 【参考方案1】:

UIAlert 仅在您的应用程序位于前台时才有效,您可以通过UILocalNotification 引起用户的注意。

此外,只有当您真正在后台运行时,您才能检测到屏幕截图。所以你的应用应该是VOIP、流音频、附件应用等。

默认你的应用程序不会在后台运行。

【讨论】:

首先谢谢您的回答。但是 NSLog 还要工作吗? NSLog 将在后台运行,但前提是您的应用未暂停。如果您的应用程序不属于允许的后台模式,您的应用程序将在进入后台时暂停。当您的应用在后台时,UIApplicationUserDidTakeScreenshotNotification 可能不会被调用。 也就是说,UIpplicationUserDidTakeScreenshotNotification 不起作用? 它可能会,不确定是否没有文档它是否会起作用,但首先你应该检查你是否可以让你的应用程序在后台运行而不会滥用background modes。 @rckoenes 最后,你知道 UIApplicationUserDidTakeScreenshotNotification 是否在后台模式下工作吗?或者是否可以在后台检测到屏幕截图?【参考方案2】:

“UIApplicationUserDidTakeScreenshotNotification”: 我认为当您的应用程序处于后台或暂停时,无法检测到屏幕截图。 此通知仅在您的应用处于前台时才会通知。

【讨论】:

以上是关于如果 App 在后台,iOS 会检测屏幕截图的主要内容,如果未能解决你的问题,请参考以下文章

如何检测屏幕截图事件并在科尔多瓦中停止它

如何使用 React-Native 在 iOS 中禁用屏幕截图

电脑为啥截屏时屏幕会变大但显示出来的只有左上角一小块,却放大到整个屏幕?

应用限制无法截屏怎么解决

在 FMX iOS App 中隐藏 App Switcher 的屏幕截图

防止 iOS 在进入后台之前对应用进行屏幕截图