请使用Swift 4 +
注意:我在iMessage扩展程序中而不是在标准iMessage视图中时正在检测屏幕截图。
更新-我想出了一个可行的解决方案,该解决方案每隔0.3秒左右在敏感信息周期内检查一次照片库,以检查是否添加了新的屏幕截图。如果用户未授予照片库许可,则在他们启用照片库之前,不会向他们显示内容。但是,我仍在寻找其他创新的解决方案,这些解决方案不一定涉及如此繁琐的过程。
我有一个iMessage扩展名,我正在尝试检测屏幕截图。我已经尝试过在网上找到的每个观察者,由于某种原因,它没有注册屏幕截图。
ViewWillAppear()
UIScreen.main.addObserver(self, forKeyPath: "captured", options: .new, context: nil)
观察者
override func observeValue(forKeyPath keyPath: String?, of object: Any?, change: [NSKeyValueChangeKey: Any]?, context: UnsafeMutableRawPointer?) {
if (keyPath == "captured") {
let isCaptured = UIScreen.main.isCaptured
print(isCaptured)
screenshot()
//screenshot() sends a message alerting the message was screens hotted. However, the print statement didn't even run.
}
}
ViewWillDisappear()
UIScreen.main.removeObserver(self, forKeyPath: "captured", context: nil)
我还尝试了标准的默认通知中心
let mainQueue = OperationQueue.main
NotificationCenter.default.addObserver(forName: UIApplication.userDidTakeScreenshotNotification, object: nil, queue: mainQueue) { notification in
// executes after screenshot
print("Screenshotted")
self.screenshot()
}
对于声称无法在iMessage扩展程序中检测屏幕截图的人(因为它是扩展程序而不是完整的应用程序),该开发人员已经能够成功地做到这一点 Working Example
答案 0 :(得分:0)
也许有点矫kill过正,但是您可以在受DRM保护的视频中转换图像,并且系统可以防止受DRM保护的视频的任何屏幕截图/屏幕共享/屏幕录制。