微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

AVAudioSession不会自动连接到蓝牙A2DP音频吗?

如何解决AVAudioSession不会自动连接到蓝牙A2DP音频吗?

说明:

通过以下调用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)。

复制步骤:

为了简化和简化苹果工程师的工作,我在AVEchoTouch Demo Code from WWDC一个经过修改的版本上重现了该问题。由于这是Apple发行的演示项目,因此都是正确的代码。我的修改后的项目名为BluetoothIssue,可以找到here

步骤1:确保您的蓝牙耳机当前未与iPhone配对。

第2步:启动“ BluetoothIssue应用程序”。当您切换“ FX Out”或“ Speech Out”切换时,该应用应该正在播放声音(iPhone扬声器除外)

第3步:现在将蓝牙耳机连接至手机。即使现在已经连接了耳机并将其与手机配对,该应用程序也不会注册连接,而是继续播放手机内置扬声器中的声音。

//步骤4-5(可选):查看应用类别本身没有问题

第4步:现在在耳机仍处于连接状态时强行杀死“ BluetoothIssue”应用程序。

第5步:现在重新启动“ BluetoothIssue”应用程序。该应用程序可以正确播放声音到蓝牙耳机。

解决方法

我了解到,如果我将模式设置为 VideoRecording,如果我打开蓝牙,iOS 将更改路线(并且我会收到路线更改通知)。如果没有这种模式,我必须同时允许两个蓝牙,在检测到一个之后,在没有 AllowBluetooth 的情况下再次更改类别,只是 A2DP。奇怪而缓慢的解决方案,但有效。现在我只是使用录像模式。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。