在iOS,如何强制AVRoutePickerView 允许扬声器和听筒之间的路由切换?
On iOS, how can I force AVRoutePickerView to allow route switching between speaker and the handset?
现在,当用户按下 AVRoutePickerView
时,他们可以选择 iPhone
和其他 AirPlay 目标。并选择iPhone
使用扬声器phone播放音频:
我希望有一个选项可以在 iPhone
和 Speaker
之间切换,其中 iPhone
将音频路由到内部听筒扬声器,Speaker
将音频路由到扬声器phone。 phone 上的其他应用程序似乎就是这样工作的(Phone、Google Voice 和其他一些应用程序):
我明白了,但我对 Apple 很生气,因为它基本上没有任何关于事情应该如何工作的文档!
本质上,您必须在 AVAudioSession
上 overrideOutputAudioPort
在调用 setCategory
之后,但在调用 setActive
之前。无论您想使用哪条路线进行覆盖(.speaker
或 .none
)都没有关系——无论哪种方式,它现在都允许您选择扬声器或 iPhone AVRoutePickerView
。这是一个例子:
try AVAudioSession.sharedInstance().setCategory(.playAndRecord)
try AVAudioSession.sharedInstance().overrideOutputAudioPort(.speaker)
try AVAudioSession.sharedInstance().setActive(true)
现在,当用户按下 AVRoutePickerView
时,他们可以选择 iPhone
和其他 AirPlay 目标。并选择iPhone
使用扬声器phone播放音频:
我希望有一个选项可以在 iPhone
和 Speaker
之间切换,其中 iPhone
将音频路由到内部听筒扬声器,Speaker
将音频路由到扬声器phone。 phone 上的其他应用程序似乎就是这样工作的(Phone、Google Voice 和其他一些应用程序):
我明白了,但我对 Apple 很生气,因为它基本上没有任何关于事情应该如何工作的文档!
本质上,您必须在 AVAudioSession
上 overrideOutputAudioPort
在调用 setCategory
之后,但在调用 setActive
之前。无论您想使用哪条路线进行覆盖(.speaker
或 .none
)都没有关系——无论哪种方式,它现在都允许您选择扬声器或 iPhone AVRoutePickerView
。这是一个例子:
try AVAudioSession.sharedInstance().setCategory(.playAndRecord)
try AVAudioSession.sharedInstance().overrideOutputAudioPort(.speaker)
try AVAudioSession.sharedInstance().setActive(true)