Могу ли я определить, находится ли система (iOS) на вызове, используя Call Kit?

Я разработал приложение для видеозвонков с использованием Twilio Video SDK, у меня есть сценарий, в котором, если iPhone находится на другом вызове (голосовой вызов), мне нужно его обнаружить и отправить статус занятости (получатель на другом вызове) в мое приложение. Есть ли способ сделать это с помощью CallKit?

Что происходит сейчас?

Если получатель находится на другом вызове (голосовой вызов), и мое приложение вызывает получателя, оба вызова продолжаются с микрофоном, используемым для голосового вызова.

Что я хочу?

Определить, находится ли система на вызове (голосовой вызов), чтобы я мог выполнить необходимое действие на основе этого


person codeIgnitor    schedule 19.04.2018    source источник
comment
Перейдите по этой ссылке stackoverflow.com/questions/29915724/   -  person Ashish    schedule 23.04.2018


Ответы (2)


Пожалуйста, обратитесь по этой ссылке: Узнайте, звонит пользователь или нет ?

Также вы можете использовать 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")
   }
}
person Sharad Chauhan    schedule 19.04.2018

Вы можете, реализовав 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's CXCallObserver, поскольку он хорошо реагирует на события внешнего вызова.

person Miki    schedule 23.04.2018