我使用Twilio Video SDK开发了一个视频通话应用程序,我有一个场景,如果iPhone正在另一个电话(语音通话),我需要检测它并将忙状态(另一个电话中的收件人)发送到我的应用程序。有什么办法可以用CallKit
来做到这一点如果收件人正在接听另一个电话(语音电话),并且我的应用程序呼叫收件人,则两个电话都会继续,并且语音电话会使用麦克风。
检测系统是否处于通话状态(语音通话),以便我可以根据此
执行所需的操作答案 0 :(得分:1)
请参阅此链接:Find if user is in a call or not?
此外,您可以使用CallKit并结合逻辑来查找许多值:
func callObserver(_ callObserver: CXCallObserver, callChanged call: CXCall) {
if call.hasEnded == true {
print("CXCallState: Disconnected")
}
if call.isOutgoing == true && call.hasConnected == false {
print("CXCallState: Dialing")
}
if call.isOutgoing == false && call.hasConnected == false && call.hasEnded == false {
print("CXCallState: Incoming")
}
if call.hasConnected == true && call.hasEnded == false {
print("CXCallState: Connected")
}
}
答案 1 :(得分:0)
您可以通过实施CXCallObserver
并使用它的委托方法callObserver(_ callChanged:)
另一个解决方案是实现所谓的音频中断通知功能,该功能将处理应用程序可以响应的外部音频中断,例如接收来电,闹钟等。
<强>步骤强>
首先,添加观察者
NotificationCenter.default.addObserver(self, selector: #selector(ViewController.handleInterruption(notification:)), name: NSNotification.Name.AVAudioSessionInterruption, object: theSession)
并实施通知处理程序
func handleInterruption(notification: NSNotification) {
guard let value = (notification.userInfo?[AVAudioSessionInterruptionTypeKey] as? NSNumber)?.uintValue,
let interruptionType = AVAudioSessionInterruptionType(rawValue: value) else {
return
}
switch interruptionType {
case .began:
// stop app audio here
break
case .ended:
// resume app audio here
break
}
}
我的建议是使用CallKit的CXCallObserver,因为它可以很好地响应外部呼叫事件。