您好,登錄后才能下訂單哦!
小編今天帶大家了解手機藍牙硬件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
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
由于流程相差無幾,所以本篇就從車機藍牙系統(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;
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)站的支持!
免責聲明:本站發(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)容。