![](/img/trans.png)
[英]How to scan and connect to Bluetooth A2DP device on iOS programmatically
[英]AVAudioSession does not automatically connect to Bluetooth A2DP audio?
描述:
当我改变我的AudioSession
到.playAndRecord
通过以下电话:
AVAudioSession.sharedInstance().setCategory(.playAndRecord, mode: .default, options: [.defaultToSpeaker, .allowBluetoothA2DP, .mixWithOthers])
从这些类别选项设置中,我希望,一旦我将蓝牙耳机与手机配对,我正在运行的应用程序应该会自动将音频路由到我的蓝牙 A2DP 耳机。 相反,我的应用程序仍然选择使用手机扬声器。 无论是查询音频会话实例还是以路由更改通知的形式,都没有任何迹象表明我已连接蓝牙耳机。
问:如何确保音频会话自动连接到蓝牙耳机?
这种行为显然与不正确的代码行无关。 就像我在调用音频会话类别更改之前配对了蓝牙耳机一样,我的音频将正确地继续使用蓝牙耳机。
此外,如果我在代码调用期间使用.allowBluetooth
类别选项(用于 HFP 而不是 A2DP),然后配对蓝牙耳机,耳机会自动连接就好了。 行为再现:配备 Apple AirPods Pro 的 iPhone XR (iOS 13.6.1) 配备 Senso 无线 44.1kHz 蓝牙耳机的 iPhone XR (iOS 13.6)。
繁殖步骤:
为了 Apple 工程师的简单性和可重复性,我在WWDC的AVEchoTouch 演示代码的轻微修改版本上重现了该问题。 由于这是 Apple 发布的演示项目,因此所有代码都是正确的。 我修改后的项目,称为BluetoothIssue
,可以在这里找到。
第 1 步:确保您的蓝牙耳机当前未与 iPhone 配对。
第 2 步:启动“BluetoothIssue App”。 当您切换“FX Out”或“Speech Out”切换时,应用程序应该正在播放声音(从 iPhone 扬声器中)
第 3 步:现在将蓝牙耳机连接到手机。 即使耳机现在已连接并与手机配对,该应用程序也不会注册连接,并继续通过手机内置扬声器播放。
// 步骤 4-5(可选):查看应用程序类别本身没有问题
第 4 步:现在强制关闭“BluetoothIssue”应用程序,同时您的耳机仍处于连接状态。
第 5 步:现在重新启动“BluetoothIssue”应用程序。 该应用程序将声音正确播放到蓝牙耳机。
我了解到,如果我将模式设置为 VideoRecording,如果我打开蓝牙,iOS 将更改路由(并且我收到路由更改通知)。 如果没有这种模式,我必须同时允许两个蓝牙,在检测到一个之后,在没有 AllowBluetooth 的情况下再次更改类别,只是 A2DP。 奇怪而缓慢的解决方案,但有效。 现在我只是使用录像模式。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.