![](/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.