Динамик / обычный микрофон во время VOIP звонка программно iOS 10 swift

Я разрабатываю приложение для iOS, используя PJSIP для VOIP Calling,

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

Я использовал следующий код для достижения этой функциональности:

if sender.titleLabel?.text == "Speaker"{

            do {
                try audioSession.overrideOutputAudioPort(.none)
                try audioSession.setCategory(AVAudioSessionCategoryPlayAndRecord)
                try audioSession.setMode(AVAudioSessionModeVoiceChat)
                try audioSession.setActive(true)
            } catch {
                print("AVAudioSession cannot be set: \(error)")
            }
        }else{
            do {
                try audioSession.overrideOutputAudioPort(.speaker)
                try audioSession.setCategory(AVAudioSessionCategoryPlayAndRecord)
                try audioSession.setMode(AVAudioSessionModeVoiceChat)
                try audioSession.setActive(true)
            } catch {
                print("AVAudioSession cannot be set: \(error)")
            }
        }

1 ответ

Я не уверен, но я думаю, что ваш код будет работать при использовании NSNotificationCenter. Отправьте уведомление для докладчика в своем заявлении if и одно уведомление для этого кода.

var speaker = false

при нажатии кнопки действие:

if speaker == false {
    NSNotificationCenter.defaultCenter().postNotificationName("speakerON", object: nil)

} else {
    NSNotificationCenter.defaultCenter().postNotificationName("speakerOFF", object: nil)

}

на viewDidLoad:

NSNotificationCenter.defaultCenter().addObserver(self, selector: #selector(YourClassName.methodOfReceivedNotification(_:)), name:"speakerON", object: nil)

NSNotificationCenter.defaultCenter().addObserver(self, selector: #selector(YourClassName.methodOfReceivedNotification(_:)), name:"speakerOFF", object: nil)

ваши функции:

func speakerON() {
try audioSession.overrideOutputAudioPort(.none)
                try audioSession.setCategory(AVAudioSessionCategoryPlayAndRecord)
                try audioSession.setMode(AVAudioSessionModeVoiceChat)
                try audioSession.setActive(true)
}

func speakerOFF() {
               try audioSession.overrideOutputAudioPort(.speaker)
                try audioSession.setCategory(AVAudioSessionCategoryPlayAndRecord)
                try audioSession.setMode(AVAudioSessionModeVoiceChat)
                try audioSession.setActive(true)
}

Пожалуйста, перейдите по этой ссылке, если вы хотите узнать больше о NSNotificationCenter:

https://stackru.com/questions/24049020/nsnotificationcenter-addobserver-in-swift

Другие вопросы по тегам