我可以使用Call Kit检测系统(iOS)是否处于通话状态

时间:2018-04-19 09:51:44

标签: ios swift callkit

我使用Twilio Video SDK开发了一个视频通话应用程序,我有一个场景,如果iPhone正在另一个电话(语音通话),我需要检测它并将忙状态(另一个电话中的收件人)发送到我的应用程序。有什么办法可以用CallKit

来做到这一点

目前发生了什么?

如果收件人正在接听另一个电话(语音电话),并且我的应用程序呼叫收件人,则两个电话都会继续,并且语音电话会使用麦克风。

我想要什么?

检测系统是否处于通话状态(语音通话),以便我可以根据此

执行所需的操作

2 个答案:

答案 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,因为它可以很好地响应外部呼叫事件。