手機藍芽硬體APP公司分析藍芽自動重連機制
在日常使用藍芽的過程中,想必大家都發現了這樣一個現象:連線藍芽裝置的手機在關閉再重新開啟藍芽後,會自動連線上先前連線著的那個裝置,同樣的場景對於安卓 手 機系統效果也是一致的。那這是怎麼實現的呢,本篇文章常州開發手機藍芽硬體APP公司就來聊一聊安卓系統中藍芽的自動重連機制。
由於藍芽分為Server和Client兩端,也就是手機和藍芽裝置( 車 機系統)這兩類具體載體,所以藍芽重連機制也會有所差異,但是整體上的流程基本相同:
監聽藍芽的狀態變化->獲取關閉藍芽前連線的裝置資訊->自動連線。
1、 手機藍芽自動重連機制的主要在程式 com.android.bluetooth 中實現的,路徑:
packages\apps\Bluetooth\src\com\android\bluetooth\btservice\PhonePolicy.java
For迴圈中透過判斷裝置某一個協議的優先順序決定是否發起該協議的連線,只有Priority = BluetoothProfile.PRIORITY_AUTO_CONNECT(1000)的裝置才會自動連線。
2、車 機藍芽自動重連機制的主要在程式 com.android.car 中實現的,路徑:
packages\services\Car\service\src\com\android\car\BluetoothDeviceConnectionPolicy.java
由於流程相差無幾,所以本篇就從車機藍芽系統的角度來分析下自動重連機制的實現原理,手機端的藍芽自動重連機制有機會再給大家 分析 。
車機藍芽的自動重連主要是在 com.android.car 這個服務程式中實現的,先來整體認識下這個程式吧。從該程式的清單檔案中可以知道其始於CarService.java:
從系統的全域性變數Settings中讀取已連線的裝置資訊,後面等監聽到藍芽狀態開啟後,再去重連這些裝置對應的各個協議。
該全域性變數儲存路徑:/data/system/users/0/settings_secure.xml
註冊監聽的藍芽廣播有如下幾種型別:
1、 BluetoothDevice.ACTION_BOND_STATE_CHANGED—裝置配對狀態;
2、 BluetoothA2dpSink.ACTION_CONNECTION_STATE_CHANGED—媒體音訊協議連線狀態;
3、 BluetoothHeadsetClient.ACTION_CONNECTION_STATE_CHANGED—手機音訊協議連線狀態;
4、 BluetoothPan.ACTION_CONNECTION_STATE_CHANGED—共享網路協議連線狀態;
5、 BluetoothPbapClient.ACTION_CONNECTION_STATE_CHANGED—電話簿協議連線狀態;
6、 BluetoothMapClient.ACTION_CONNECTION_STATE_CHANGED—簡訊協議連線狀態;
7、 BluetoothAdapter.ACTION_STATE_CHANGED—藍芽開關狀態;
8、 BluetoothDevice.ACTION_UUID—裝置UUID;
CarBluetoothUserService是透過bind服務PerUserCarService後getBluetoothUserService()間接使能起來的。
最後對協議重連是按照如下的協議順序來依次連線:
1、 BluetoothProfile.HEADSET_CLIENT
2、 BluetoothProfile.A2DP_SINK
3、 BluetoothProfile.PBAP_CLIENT
4、 BluetoothProfile.MAP_CLIENT
5、 BluetoothProfile.PAN
從整個流程分析下來最為關鍵的部分就是從Setting中讀取資料,並且會在藍芽關閉或程式退出時將已連線裝置的資訊儲存到Setting中。
實際上重連機制不單單適用於上述這種開啟藍芽後的場景,有時藍芽裝置間由於各種原因而導致鏈路斷開,過了一段時間需要自動重連上藍芽裝置,這種場景在上面的重連機制中就不適用了,那該如何實現呢?
方法那也是有的,還記得我有寫過一篇詳細講解了藍芽ACL鏈路斷開的幾種原因,然而不是每種斷開都需要自動重連的。比如使用者手動斷開藍芽這種情況下還發起自動重連,那就太讓人無語了。
所以我們只需要對由於鏈路超時導致的ACL斷開的場景,自動發起重連。這樣等兩個藍芽裝置再次靠近時,就能自動連線成功。
由於兩個藍芽裝置超時斷開後,再次靠近的時間是不確定的,如果只發起一次自動重連可能無法成功連線上裝置,因此這裡的自動重連機制中需要加個迴圈以保證某一次成功連線。
藍芽重連機制就簡單分析到這兒,感興趣的小夥伴 可以諮詢常州開發APP公司點個贊科技。
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/31421468/viewspace-2706551/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 藍芽耳機怎麼連線手機 藍芽耳機連線手機的方法藍芽
- 音響怎麼連線手機藍芽 音響連線手機藍芽的方法藍芽
- 怎麼用手機藍芽連線電腦 手機藍芽連線電腦的步驟藍芽
- 小愛音響怎麼使用藍芽連線手機 小愛音響連線手機藍芽的方法藍芽
- 藍芽耳機怎麼連線手機連不上怎麼辦 藍芽耳機突然無法連線手機藍芽
- ubuntu20.04怎麼使用藍芽連線手機互傳檔案?ubuntu連線藍芽手機傳檔案的技巧Ubuntu藍芽
- 藍芽危機:藍芽漏洞致使NestDropcam無線攝像頭深陷安全危機藍芽PCA
- 藍芽藍芽
- 熊晨灃藍芽實戰--小程式藍芽連線2.0藍芽
- 電腦藍芽怎麼連線 電腦連線藍芽的方法藍芽
- 在gentoo linux下使用藍芽手機(轉)Linux藍芽
- 手機藍芽搜尋不到裝置怎麼辦 藍芽裝置刪除後搜尋不到藍芽
- Android藍芽使用詳解(普通藍芽)Android藍芽
- 藍芽模組藍芽模組
- iOS 藍芽iOS藍芽
- ios 藍芽iOS藍芽
- Android藍芽那點事——深入瞭解藍芽BlE藍芽 《總結篇》Android藍芽
- win10系統怎麼連線手機藍芽【圖文教程】Win10藍芽
- Mac藍芽連線有問題該如何?教你重置Mac藍芽模組Mac藍芽模組
- iOS藍芽開發 Bluetooth藍芽CoreBluetooth 藍芽中心裝置的實現 藍芽外設的實現 有DemoiOS藍芽
- 藍芽韌體升級藍芽
- Android藍芽協議-藍芽掃描 startDiscoveryAndroid藍芽協議
- 藍芽之十二-HFP app層藍芽APP
- 筆記本怎麼連藍芽耳機 筆記本連線藍芽耳機步驟筆記藍芽
- 電腦怎麼連藍芽音響 藍芽音響連線電腦步驟藍芽
- 怎麼更新電腦藍芽驅動 win10藍芽驅動更新藍芽Win10
- 藍芽 HID class descriptor 分析藍芽
- 藍芽HFP 藍芽電話剖析(二) --- AT command集合藍芽
- ESP32藍芽學習--藍芽概念學習藍芽
- 電腦可以連藍芽耳機嗎 win10電腦怎麼連線藍芽耳機藍芽Win10
- 電腦能連藍芽耳機嗎 電腦怎麼連線藍芽耳機win10藍芽Win10
- java+藍芽Java藍芽
- iOSBluetooth(藍芽)iOS藍芽
- 藍芽4.0 BLE藍芽
- 白色藍芽耳機藍芽
- 羅技滑鼠怎麼藍芽連線電腦 電腦找不到羅技藍芽滑鼠藍芽
- Macbook如何連線藍芽鍵盤?Mac藍芽
- MASA MAUI Plugin 安卓藍芽低功耗(一)藍芽掃描UIPlugin安卓藍芽