Я хочу сначала настроить вызов на использование громкоговорителя, а затем разрешить пользователю переключиться. между наушником и громкоговорителем в зависимости от их действия в пользовательском интерфейсе CallKit. Однако когда я отключаю кнопку динамика для воспроизведения через наушник, это не работает. Есть ли какое-либо решение этой проблемы?
Я вижу, что проблема с пользовательским интерфейсом динамика CallKit все еще не решена, поскольку существует множество открытых проблем, связанных с одной и той же проблемой. Даже если возникла проблема с пользовательским интерфейсом, я хочу, чтобы звук воспроизводился через наушник или громкоговоритель в зависимости от выбора пользователя, независимо от состояния пользовательского интерфейса кнопки.
Ниже приведен журнал, я не знаю, как эта категорияChange иrouteConfigurationChange запускается и обновляется на приемнике из динамика.
- АУДИО: встроенный динамик
- АУДИО: изменение категории
- АУДИО: встроенный получатель
- АУДИО: изменение конфигурации маршрута
- АУДИО : встроенныйInReceiver
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
Мобильная версия