手機藍芽硬體APP公司分析藍芽自動重連機制

ccit0519發表於2020-07-23

在日常使用藍芽的過程中,想必大家都發現了這樣一個現象:連線藍芽裝置的手機在關閉再重新開啟藍芽後,會自動連線上先前連線著的那個裝置,同樣的場景對於安卓 機系統效果也是一致的。那這是怎麼實現的呢,本篇文章常州開發手機藍芽硬體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/,如需轉載,請註明出處,否則將追究法律責任。

相關文章