在iOS,如何强制AVRoutePickerView 允许扬声器和听筒之间的路由切换?

On iOS, how can I force AVRoutePickerView to allow route switching between speaker and the handset?

现在,当用户按下 AVRoutePickerView 时,他们可以选择 iPhone 和其他 AirPlay 目标。并选择iPhone使用扬声器phone播放音频:

我希望有一个选项可以在 iPhoneSpeaker 之间切换,其中 iPhone 将音频路由到内部听筒扬声器,Speaker将音频路由到扬声器phone。 phone 上的其他应用程序似乎就是这样工作的(Phone、Google Voice 和其他一些应用程序):

我明白了,但我对 Apple 很生气,因为它基本上没有任何关于事情应该如何工作的文档!

本质上,您必须在 AVAudioSessionoverrideOutputAudioPort 在调用 setCategory 之后,但在调用 setActive 之前。无论您想使用哪条路线进行覆盖(.speaker.none)都没有关系——无论哪种方式,它现在都允许您选择扬声器或 iPhone AVRoutePickerView。这是一个例子:

try AVAudioSession.sharedInstance().setCategory(.playAndRecord)
try AVAudioSession.sharedInstance().overrideOutputAudioPort(.speaker)
try AVAudioSession.sharedInstance().setActive(true)