You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何检测用户拒绝RPScreenRecorder录屏权限请求?

解决方案:检测RPScreenRecorder录制权限拒绝状态

1. 优先主动请求录制权限(最可靠方式)

直接调用requestRecordingPermissions方法提前获取用户权限选择,无需依赖录制启动时的错误回调:

@objc func checkRecordingPermission() {
    guard #available(iOS 11.0, *) else { return }
    
    RPScreenRecorder.shared().requestRecordingPermissions { granted in
        DispatchQueue.main.async {
            if granted {
                // 用户允许权限,执行录制逻辑
                self.startRecording(width: 1920, height: 1080)
            } else {
                // 用户拒绝权限,执行对应提示或处理
                print("User declined application recording permission.")
            }
        }
    }
}

2. 修正启动录制时的错误检测逻辑

如果需要在启动录制的流程中捕获权限错误,需注意两个关键点:

  • startCapture可能直接抛出错误,需用do-catch捕获
  • 错误判断需同时校验错误域和错误码,避免误判其他同码错误

修正后的startRecording方法:

@objc func startRecording(width: Int32, height: Int32) -> Bool {
    var res: Bool = true
    let recorder = RPScreenRecorder.shared()
    
    guard #available(iOS 11.0, *) else { return false }
    
    do {
        try recorder.startCapture(handler: { (cmSampleBuffer, rpSampleType, error) in
            guard error == nil else {
                self.handleRecordingError(error!)
                res = false
                return
            }
            // 处理录制的采样缓冲数据
        })
    } catch {
        self.handleRecordingError(error)
        res = false
    }
    
    return res
}

private func handleRecordingError(_ error: Error) {
    let rpError = error as NSError
    guard rpError.domain == RPRecordingErrorDomain else {
        print("Non-recording error: \(rpError.localizedDescription)")
        return
    }
    
    switch RPRecordingErrorCode(rawValue: rpError.code) {
    case .userDeclined:
        print("User declined application recording permission.")
    case .failedToStart:
        print("Failed to start recording.")
    default:
        print("Recording error: \(rpError.localizedDescription)")
    }
}

原代码未触发错误回调的原因

  1. 权限拒绝的错误可能直接在startCapture调用时抛出,而非通过handler返回,原代码未用do-catch捕获这部分错误
  2. 仅校验错误码未校验错误域,可能忽略了系统返回的正确权限拒绝错误

内容的提问来源于stack exchange,提问作者jdevp2

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.05 11:05:07