最近我們公司的語音遙控器的項目就快要進入尾聲了,還需要優化一下藍牙回連這塊的技術。先來看看需求:
iOS 端:
1、當設備開機時,嘗試回連最后一次連接過的設備 A2DP(多個設備的情況下優先連接最后連接的設備);
2、連接上 A2DP 后,掃描設備 BLE 連接設備 BLE(在當前打開應用或者應用在后台打開情況下);
Android
第一種情況:
1、當設備開機時,嘗試回連最后一次連接過的設備 A2DP(多個設備的情況下優先連接最后連接的設備);
2、連接上 A2DP 后,App 拿到藍牙對象,去連接 SPP (在當前打開應用或者應用在后台打開情況下);
第二種情況:
1、手機“設置”自動回連上一次最新的 A2DP 連接;
2、連接上 A2DP 后,App 拿到藍牙對象,去連接 SPP (在當前打開應用或者應用在后台打開情況下);
第三種情況:
進入 App 之后,如果原來本地保存的連接數據顯示有最后的一次連接的設備,就嘗試自動連接這個設備(A2DP + SPP一起連接 )。
回連邏輯 (BLE遙控器)
iOS/Android
第一種情況
iOS/Android
被動斷開情況下,會一直去自動掃描,掃到為止。
第二種情況
打開應用,會檢測到上次保存的最新的一次 BLE 自動回連
特殊情況
當 App 最后一次連接 BLE 設備,退出之后,在系統設置頁面連接音箱(某些手機可以連接一個或者多個),再次進入的時候,回連 BLE 然后會回連 2819 音箱,這個時候我們允許 2819 音箱和 BLE 共存。某些手機存在可以連接多個音箱(過濾是否是我們的產品)的情況,默認回連第一個。
為了用戶的方便使用,現在的連接藍牙的應用和設備大部分都做了回連的處理。比如你的藍牙耳機,當它關機之后,就會和你的手機斷開,重新開機時,又會自動和你的藍牙進行連接。這里就做了回連的技術處理。今天我要寫的就是這塊的總結和邏輯處理。
藍牙版本
- 藍牙4.0:也叫BLE(Bluetooth low energy),特點是功耗低,傳輸速率也較低。但絕對可以滿足市場上的大部分智能穿戴產品了,是目前iOS藍牙開發的主流。從iPhone4s開始支持。使用
CoreBluetooth
進行開發 - 藍牙3.0:硬件需要獲得MFi認證才能配合iOS設備使用,使用
ExternalAccessory
框架進行開發。 因為硬件有要求,一般的藍牙外設都不會選擇3.0,除了涉及高質量音頻傳輸的,比如耳機。
目前我們采用的是藍牙 4.0 版本。當一個設備因為沒電關機,或者自動關機的情況會與 BLE 斷開,當再次開機的時候,他會與最后一次設備自動進行連接,不需要走配對的過程,叫做藍牙回連。
在測試過程中,我們需要注意一下幾個場景:
1 設備被強制關機或者是斷電關機
2 設備和手機距離太遠斷開
3 只是斷開 A2DP 的情況
4 應用被結束進程
設備要是被強制關機了或者是斷電關機了,開機之后,應用如果沒有關閉是需要自動回連的。系統的 A2DP 會自動回連,iOS 出現過音源輸出選擇的 bug,A2DP 已經連接,但是聲音是默認從 iPhone 中出聲,這個問題目前還沒有解決。
設備和手機距離太遠斷開,這里有可能會回連失敗,因為硬件如果設置掃描幾次就不再發起回連,應用也就沒辦法回連成功了。
只是斷開 A2DP 的情況下,BLE 還是在連接狀態,可以正常調起應用,但是不能讓聲音從設備端出來。這一點目前也沒有辦法修改,這是蘋果系統設定。
應用被結束了進程,手機系統的藍牙是在連接狀態的,但是應用內 BLE 卻已經斷開了。