swift 检查屏幕是否快速记录

ygya80vv  于 2023-02-03  发布在  Swift
关注(0)|答案(2)|浏览(142)

我尝试检查屏幕是否正在录制,然后才允许以下操作,我最初尝试使用ReplayKit自动录制,但这不是一个可行的解决方案,因为它不允许在应用程序外录制,所以基本上我想做的是检查用户是否已经开始使用IOS控制中心录制器录制屏幕,然后再允许他们执行另一段代码。
比如:

func handleScreen() {
    var isRecording: Bool = false

    if ScreenIsRecording { //(this is what i don't know how to check) 
       isRecording = true 
    }

    if isRecording == true {
     //   execute this code.
    }
            
}

我对其他能够执行屏幕录制的解决方案持开放态度,但它必须能够录制所有屏幕,而不仅仅是应用程序内的屏幕。
谢谢

vlurs2pr

vlurs2pr1#

UIScreen包含UIScreen.isCaptured属性,您应该能够引用该属性来确定屏幕是否可能正在录制。但是,如果设备正在进行AirPlay或其他广播,则此属性也将返回true
值为YES表示系统正在积极录制、镜像或使用AirPlay流化屏幕内容。

if UIScreen.mainScreen().isCaptured {
    isRecording = true
}
eyh26e7m

eyh26e7m2#

我刚刚在iOS 16上测试了这个,尽管文档中说iscaptured应该在AirPlay上返回true,但我测试的时候却没有!
观察isCaptured with NotificationCenter的变更:

NotificationCenter.default.addObserver(self, selector: #selector(screenCaptureDidChange),
                                       name: UIScreen.capturedDidChangeNotification,
                                       object: nil)

处理通知:

@objc func screenCaptureDidChange() {
    debugPrint("screenCaptureDidChange.. isCapturing: \(UIScreen.main.isCaptured)")
    
    if !UIScreen.main.isCaptured {
        //TODO: They stopped capturing..
    } else {
        //TODO: They started capturing..
        debugPrint("screenCaptureDidChange - is recording screen")
    }
}

启动AirPlay时不会触发此通知,如果您在AirPlay时开始屏幕录制,则在停止录制时会触发通知,但即使AirPlay仍处于活动状态,UIScreen.main.isCaptured也为false。

相关问题