Кнопка динамика CallKit не работает должным образомIOS

Программируем под IOS
Ответить
Anonymous
 Кнопка динамика CallKit не работает должным образом

Сообщение Anonymous »

Я использую CallKit для своего приложения для аудиовызовов. Кнопка динамика в CallKit не работает должным образом. Он включается и выключается автоматически. Когда я пытаюсь отключить кнопку динамика, я все равно слышу голос через громкоговоритель.
Я хочу сначала настроить вызов на использование громкоговорителя, а затем разрешить пользователю переключиться. между наушником и громкоговорителем в зависимости от их действия в пользовательском интерфейсе CallKit. Однако когда я отключаю кнопку динамика для воспроизведения через наушник, это не работает. Есть ли какое-либо решение этой проблемы?
Я вижу, что проблема с пользовательским интерфейсом динамика CallKit все еще не решена, поскольку существует множество открытых проблем, связанных с одной и той же проблемой. Даже если возникла проблема с пользовательским интерфейсом, я хочу, чтобы звук воспроизводился через наушник или громкоговоритель в зависимости от выбора пользователя, независимо от состояния пользовательского интерфейса кнопки.
Ниже приведен журнал, я не знаю, как эта категорияChange иrouteConfigurationChange запускается и обновляется на приемнике из динамика.
  • АУДИО: встроенный динамик
  • АУДИО: изменение категории
  • АУДИО: встроенный получатель
  • АУДИО: изменение конфигурации маршрута
  • АУДИО : встроенныйInReceiver
Ниже приведен мой код для настройки аудиосеанса, и я активирую аудиосеанс в func-провайдере (_ поставщик: CXProvider, DidActivate audioSession: AVAudioSession)
func configureAudioSession() {
let rtcAudioSession = RTCAudioSession.sharedInstance()
rtcAudioSession.lockForConfiguration()
do {
var categoryOptions: AVAudioSession.CategoryOptions = [.defaultToSpeaker, .allowBluetoothA2DP, .allowAirPlay, .allowBluetooth]

try rtcAudioSession.setCategory(.playAndRecord, with: categoryOptions)
try rtcAudioSession.setMode(.voiceChat)
} catch {
//Error
}
rtcAudioSession.unlockForConfiguration()

NotificationCenter.default.addObserver(self, selector: #selector(routeChange), name: AVAudioSession.routeChangeNotification, object: nil)
}

@objc private func routeChange(_ n: Foundation.Notification) {

let session = AVAudioSession.sharedInstance()
let currentRoute = session.currentRoute

if session.currentRoute.outputs.contains(where: { $0.portType == .headphones || $0.portType == .bluetoothHFP || $0.portType == .bluetoothA2DP }) {
try? session.overrideOutputAudioPort(.none)
} else {
try? session.overrideOutputAudioPort(.speaker)
}
}


Подробнее здесь: https://stackoverflow.com/questions/785 ... g-properly
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «IOS»