Прямо сейчас, когда пользователь нажимает AVRoutePickerView
, он получает выбор iPhone
и других целей AirPlay. При выборе iPhone
для воспроизведения звука используется громкая связь:
Я бы хотел, чтобы была возможность переключаться между iPhone
и Speaker
, где iPhone
направляет звук на внутренний динамик телефона, а Speaker
направляет звук на громкую связь. Вот как работают другие приложения на телефоне (Phone, Google Voice и некоторые другие):
Спасибо, но я это уже пробовал. Я пробовал несколько режимов, категорий и опций AVAudioSession. Может быть, для этого требуется определенная комбинация?
Я понял это, но я очень зол на Apple за то, что у нее практически нет документации о том, как все должно работать!
По сути, вы должны overrideOutputAudioPort
включить AVAudioSession
после звонка setCategory
, но до звонка setActive
. Неважно, какой маршрут вы хотите использовать для переопределения (.speaker
или .none
) — в любом случае теперь вы сможете выбрать либо динамик, либо iPhone в AVRoutePickerView
. Вот пример:
try AVAudioSession.sharedInstance().setCategory(.playAndRecord)
try AVAudioSession.sharedInstance().overrideOutputAudioPort(.speaker)
try AVAudioSession.sharedInstance().setActive(true)
Обратите внимание, что наличие параметра динамика в AVRoutePickerView зависит от установленного вами режима. Например, если вы используете AVAudioSession.Mode.videoChat, динамик не будет отображаться, но будет использоваться автоматически, пока вы не поднесете приемник к уху. Согласно заголовку Apple о некоторых режимах: «Уменьшает количество допустимых аудиомаршрутов до тех, которые подходят для приложений видеочата». Кстати, если вы щелкнете в Xcode в каждом режиме в заголовке Apple AVAudioSession, вы получите больше подробностей, чем в документах Apple в Интернете, или даже лучше, чем комментарии в самом заголовке.
Просто предположение, попробуйте добавить/удалить опцию
.defaultToSpeaker
вAVAudioSession