我现在正在使用voip应用程序,并希望支持暂停。 但是当第二个电话打来时,我保留了当前的电话。切换到我的第一个电话,我什么都听不到。 听到声音的方法是从callKit本机屏幕导航到我的应用,因此我可以听到声音。
func configureAudioSession() {
_ = try? AVAudioSession.sharedInstance().setCategory(AVAudioSession.Category.playAndRecord, mode: .videoChat, options: AVAudioSession.CategoryOptions.mixWithOthers)
_ = try? AVAudioSession.sharedInstance().overrideOutputAudioPort(AVAudioSession.PortOverride.none)
_ = try? AVAudioSession.sharedInstance().setMode(AVAudioSession.Mode.voiceChat)
}
func startAudio() {
print("Starting audio")
do {
_ = try AVAudioSession.sharedInstance().setActive(true)
} catch {
}
}
func stopAudio() {
print("Stopping audio")
do {
_ = try AVAudioSession.sharedInstance().setActive(false)
} catch {
}
}
答案 0 :(得分:0)
对于支持保持,您不必启动/停止音频会话,而是可以使用Callkit本身提供的CXSetHeldCallAction
。这是我使用的保留代码。
let callKitCallController = CXCallController()
func performHoldAction(isOnHold:Bool, uuid:UUID) {
let holdCallAction = CXSetHeldCallAction(call: uuid, onHold: isOnHold)
let transaction = CXTransaction(action: holdCallAction)
callKitCallController.request(transaction) { error in
if let error = error {
CPrint("holdCallAction transaction request failed: \(error.localizedDescription).")
return
}
CPrint("holdCallAction transaction request successful")
}
}
一旦系统将呼叫保留(通过上述方法,或者由于接受其他传入呼叫或任何其他原因),然后在CXProviderDelegate
中,方法func provider(_ provider: CXProvider, perform action: CXSetHeldCallAction)
为您提供详细信息的回调。
在这里,系统/呼叫包本身与音频交互,您无需显式启动或停止音频即可保存。
注意:请确保您为新呼叫指定的supportsHolding
已将true
赋予CXCallUpdate
。