recently i found when user select the last one item [dont allow],but didn
t have any callback tell me ,cause the developer don`t konw which one user select it.
static private func startCapture(callback:@escaping(_ code:ScreenCheckStatus,_ msg:String) ->Void) {
RPScreenRecorder.shared().isMicrophoneEnabled = true
isCheckAuthAlreadStop = false
startListenRefuseRecord(callback: callback)
///startCapture(handler captureHandler: ((CMSampleBuffer, RPSampleBufferType, Error?) -> Void)?) async throws
RPScreenRecorder.shared().startCapture { buffer, bufType, error in
if error != nil {
callback(.startRecordError,error!.localizedDescription)
}else{
self.stopListenRefuseRecord()
if buffer.isValid && CMSampleBufferDataIsReady(buffer) == true && !self.isCheckAuthAlreadStop{
self.stopCapture(callback: callback)
self.isCheckAuthAlreadStop = true
}
}
}
}
static private func startListenRefuseRecord(callback:@escaping(_ code:ScreenCheckStatus,_ msg:String) ->Void) {
ScreenCheck.isUserRefuseRecord = false
let publisher1 = RPScreenRecorder.shared().publisher(for: \.isRecording)
let publisher2 = RPScreenRecorder.shared().publisher(for: \.isMicrophoneEnabled)
let cancelBag = Subscribers.Sink<Bool, Never>(receiveCompletion: { complete in
}, receiveValue: {value in
if !ScreenCheck.isUserRefuseRecord && value{
ScreenCheck.isUserRefuseRecord = true
callback(.resufeRecordError,"用户拒绝屏幕录制,请重新启动app,否则将导致屏幕录制失败")
ScreenCheck.stopListenRefuseRecord()
}
})
let latest = Publishers.CombineLatest(publisher1, publisher2)
.throttle(for: 2, scheduler: RunLoop.main, latest: true)
.map{ !$0 && !$1}
latest.subscribe(cancelBag)
self.userRefuseRecordCancelBag = cancelBag
}
how to konw why the replaykit don`t give callback when use select limits of authority ,and how to solve this problem ?