溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

手機藍牙硬件APP公司如何分析藍牙自動重連機制

發(fā)布時間:2022-01-19 09:21:55 來源:億速云 閱讀:252 作者:柒染 欄目:互聯(lián)網(wǎng)科技

小編今天帶大家了解手機藍牙硬件APP公司如何分析藍牙自動重連機制,文中知識點介紹的非常詳細。覺得有幫助的朋友可以跟著小編一起瀏覽文章的內(nèi)容,希望能夠幫助更多想解決這個問題的朋友找到問題的答案,下面跟著小編一起深入學(xué)習“手機藍牙硬件APP公司如何分析藍牙自動重連機制”的知識吧。

在日常使用藍牙的過程中,想必大家都發(fā)現(xiàn)了這樣一個現(xiàn)象:連接藍牙設(shè)備的手機在關(guān)閉再重新打開藍牙后,會自動連接上先前連接著的那個設(shè)備,同樣的場景對于安卓手機系統(tǒng)效果也是一致的。那這是怎么實現(xiàn)的呢,本篇文章常州開發(fā)手機藍牙硬件APP公司就來聊一聊安卓系統(tǒng)中藍牙的自動重連機制。

由于藍牙分為Server和Client兩端,也就是手機和藍牙設(shè)備(車機系統(tǒng))這兩類具體載體,所以藍牙重連機制也會有所差異,但是整體上的流程基本相同:

監(jiān)聽藍牙的狀態(tài)變化->獲取關(guān)閉藍牙前連接的設(shè)備信息->自動連接。

1、手機藍牙自動重連機制的主要在進程 com.android.bluetooth 中實現(xiàn)的,路徑:

packages\apps\Bluetooth\src\com\android\bluetooth\btservice\PhonePolicy.java

手機藍牙硬件APP公司如何分析藍牙自動重連機制

For循環(huán)中通過判斷設(shè)備某一個協(xié)議的優(yōu)先級決定是否發(fā)起該協(xié)議的連接,只有Priority = BluetoothProfile.PRIORITY_AUTO_CONNECT(1000)的設(shè)備才會自動連接。

2、車機藍牙自動重連機制的主要在進程 com.android.car 中實現(xiàn)的,路徑:

packages\services\Car\service\src\com\android\car\BluetoothDeviceConnectionPolicy.java

手機藍牙硬件APP公司如何分析藍牙自動重連機制

由于流程相差無幾,所以本篇就從車機藍牙系統(tǒng)的角度來分析下自動重連機制的實現(xiàn)原理,手機端的藍牙自動重連機制有機會再給大家分析。

車機藍牙的自動重連主要是在 com.android.car 這個服務(wù)進程中實現(xiàn)的,先來整體認識下這個進程吧。從該進程的清單文件中可以知道其始于CarService.java:

從系統(tǒng)的全局變量Settings中讀取已連接的設(shè)備信息,后面等監(jiān)聽到藍牙狀態(tài)打開后,再去重連這些設(shè)備對應(yīng)的各個協(xié)議。

該全局變量存儲路徑:/data/system/users/0/settings_secure.xml

注冊監(jiān)聽的藍牙廣播有如下幾種類型:

1、BluetoothDevice.ACTION_BOND_STATE_CHANGED—設(shè)備配對狀態(tài);

2、BluetoothA2dpSink.ACTION_CONNECTION_STATE_CHANGED—媒體音頻協(xié)議連接狀態(tài);

3、BluetoothHeadsetClient.ACTION_CONNECTION_STATE_CHANGED—手機音頻協(xié)議連接狀態(tài);

4、BluetoothPan.ACTION_CONNECTION_STATE_CHANGED—共享網(wǎng)絡(luò)協(xié)議連接狀態(tài);

5、BluetoothPbapClient.ACTION_CONNECTION_STATE_CHANGED—電話簿協(xié)議連接狀態(tài);

6、BluetoothMapClient.ACTION_CONNECTION_STATE_CHANGED—短信協(xié)議連接狀態(tài);

7、BluetoothAdapter.ACTION_STATE_CHANGED—藍牙開關(guān)狀態(tài);

8、BluetoothDevice.ACTION_UUID—設(shè)備UUID;

手機藍牙硬件APP公司如何分析藍牙自動重連機制

CarBluetoothUserService是通過bind服務(wù)PerUserCarService后getBluetoothUserService()間接使能起來的。

最后對協(xié)議重連是按照如下的協(xié)議順序來依次連接:

1、BluetoothProfile.HEADSET_CLIENT

2、BluetoothProfile.A2DP_SINK

3、BluetoothProfile.PBAP_CLIENT

4、BluetoothProfile.MAP_CLIENT

5、BluetoothProfile.PAN

從整個流程分析下來最為關(guān)鍵的部分就是從Setting中讀取數(shù)據(jù),并且會在藍牙關(guān)閉或進程退出時將已連接設(shè)備的信息保存到Setting中。

實際上重連機制不單單適用于上述這種打開藍牙后的場景,有時藍牙設(shè)備間由于各種原因而導(dǎo)致鏈路斷開,過了一段時間需要自動重連上藍牙設(shè)備,這種場景在上面的重連機制中就不適用了,那該如何實現(xiàn)呢?

方法那也是有的,還記得我有寫過一篇詳細講解了藍牙ACL鏈路斷開的幾種原因,然而不是每種斷開都需要自動重連的。比如用戶手動斷開藍牙這種情況下還發(fā)起自動重連,那就太讓人無語了。

所以我們只需要對由于鏈路超時導(dǎo)致的ACL斷開的場景,自動發(fā)起重連。這樣等兩個藍牙設(shè)備再次靠近時,就能自動連接成功。

由于兩個藍牙設(shè)備超時斷開后,再次靠近的時間是不確定的,如果只發(fā)起一次自動重連可能無法成功連接上設(shè)備,因此這里的自動重連機制中需要加個循環(huán)以保證某一次成功連接。

感謝大家的閱讀,以上就是“手機藍牙硬件APP公司如何分析藍牙自動重連機制”的全部內(nèi)容了,學(xué)會的朋友趕緊操作起來吧。相信億速云小編一定會給大家?guī)砀鼉?yōu)質(zhì)的文章。謝謝大家對億速云網(wǎng)站的支持!

向AI問一下細節(jié)

免責聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。

app
AI