小編今天帶大家了解手機(jī)藍(lán)牙硬件APP公司如何分析藍(lán)牙自動(dòng)重連機(jī)制,文中知識(shí)點(diǎn)介紹的非常詳細(xì)。覺得有幫助的朋友可以跟著小編一起瀏覽文章的內(nèi)容,希望能夠幫助更多想解決這個(gè)問題的朋友找到問題的答案,下面跟著小編一起深入學(xué)習(xí)“手機(jī)藍(lán)牙硬件APP公司如何分析藍(lán)牙自動(dòng)重連機(jī)制”的知識(shí)吧。
德惠網(wǎng)站制作公司哪家好,找創(chuàng)新互聯(lián)公司!從網(wǎng)頁設(shè)計(jì)、網(wǎng)站建設(shè)、微信開發(fā)、APP開發(fā)、成都響應(yīng)式網(wǎng)站建設(shè)公司等網(wǎng)站項(xiàng)目制作,到程序開發(fā),運(yùn)營維護(hù)。創(chuàng)新互聯(lián)公司公司2013年成立到現(xiàn)在10年的時(shí)間,我們擁有了豐富的建站經(jīng)驗(yàn)和運(yùn)維經(jīng)驗(yàn),來保證我們的工作的順利進(jìn)行。專注于網(wǎng)站建設(shè)就選創(chuàng)新互聯(lián)公司。
在日常使用藍(lán)牙的過程中,想必大家都發(fā)現(xiàn)了這樣一個(gè)現(xiàn)象:連接藍(lán)牙設(shè)備的手機(jī)在關(guān)閉再重新打開藍(lán)牙后,會(huì)自動(dòng)連接上先前連接著的那個(gè)設(shè)備,同樣的場景對于安卓手機(jī)系統(tǒng)效果也是一致的。那這是怎么實(shí)現(xiàn)的呢,本篇文章常州開發(fā)手機(jī)藍(lán)牙硬件APP公司就來聊一聊安卓系統(tǒng)中藍(lán)牙的自動(dòng)重連機(jī)制。
由于藍(lán)牙分為Server和Client兩端,也就是手機(jī)和藍(lán)牙設(shè)備(車機(jī)系統(tǒng))這兩類具體載體,所以藍(lán)牙重連機(jī)制也會(huì)有所差異,但是整體上的流程基本相同:
監(jiān)聽藍(lán)牙的狀態(tài)變化->獲取關(guān)閉藍(lán)牙前連接的設(shè)備信息->自動(dòng)連接。
1、手機(jī)藍(lán)牙自動(dòng)重連機(jī)制的主要在進(jìn)程 com.android.bluetooth 中實(shí)現(xiàn)的,路徑:
packages\apps\Bluetooth\src\com\android\bluetooth\btservice\PhonePolicy.java
For循環(huán)中通過判斷設(shè)備某一個(gè)協(xié)議的優(yōu)先級決定是否發(fā)起該協(xié)議的連接,只有Priority = BluetoothProfile.PRIORITY_AUTO_CONNECT(1000)的設(shè)備才會(huì)自動(dòng)連接。
2、車機(jī)藍(lán)牙自動(dòng)重連機(jī)制的主要在進(jìn)程 com.android.car 中實(shí)現(xiàn)的,路徑:
packages\services\Car\service\src\com\android\car\BluetoothDeviceConnectionPolicy.java
由于流程相差無幾,所以本篇就從車機(jī)藍(lán)牙系統(tǒng)的角度來分析下自動(dòng)重連機(jī)制的實(shí)現(xiàn)原理,手機(jī)端的藍(lán)牙自動(dòng)重連機(jī)制有機(jī)會(huì)再給大家分析。
車機(jī)藍(lán)牙的自動(dòng)重連主要是在 com.android.car 這個(gè)服務(wù)進(jìn)程中實(shí)現(xiàn)的,先來整體認(rèn)識(shí)下這個(gè)進(jìn)程吧。從該進(jìn)程的清單文件中可以知道其始于CarService.java:
從系統(tǒng)的全局變量Settings中讀取已連接的設(shè)備信息,后面等監(jiān)聽到藍(lán)牙狀態(tài)打開后,再去重連這些設(shè)備對應(yīng)的各個(gè)協(xié)議。
該全局變量存儲(chǔ)路徑:/data/system/users/0/settings_secure.xml
注冊監(jiān)聽的藍(lá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—手機(jī)音頻協(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—藍(lán)牙開關(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
從整個(gè)流程分析下來最為關(guān)鍵的部分就是從Setting中讀取數(shù)據(jù),并且會(huì)在藍(lán)牙關(guān)閉或進(jìn)程退出時(shí)將已連接設(shè)備的信息保存到Setting中。
實(shí)際上重連機(jī)制不單單適用于上述這種打開藍(lán)牙后的場景,有時(shí)藍(lán)牙設(shè)備間由于各種原因而導(dǎo)致鏈路斷開,過了一段時(shí)間需要自動(dòng)重連上藍(lán)牙設(shè)備,這種場景在上面的重連機(jī)制中就不適用了,那該如何實(shí)現(xiàn)呢?
方法那也是有的,還記得我有寫過一篇詳細(xì)講解了藍(lán)牙ACL鏈路斷開的幾種原因,然而不是每種斷開都需要自動(dòng)重連的。比如用戶手動(dòng)斷開藍(lán)牙這種情況下還發(fā)起自動(dòng)重連,那就太讓人無語了。
所以我們只需要對由于鏈路超時(shí)導(dǎo)致的ACL斷開的場景,自動(dòng)發(fā)起重連。這樣等兩個(gè)藍(lán)牙設(shè)備再次靠近時(shí),就能自動(dòng)連接成功。
由于兩個(gè)藍(lán)牙設(shè)備超時(shí)斷開后,再次靠近的時(shí)間是不確定的,如果只發(fā)起一次自動(dòng)重連可能無法成功連接上設(shè)備,因此這里的自動(dòng)重連機(jī)制中需要加個(gè)循環(huán)以保證某一次成功連接。
感謝大家的閱讀,以上就是“手機(jī)藍(lán)牙硬件APP公司如何分析藍(lán)牙自動(dòng)重連機(jī)制”的全部內(nèi)容了,學(xué)會(huì)的朋友趕緊操作起來吧。相信創(chuàng)新互聯(lián)小編一定會(huì)給大家?guī)砀鼉?yōu)質(zhì)的文章。謝謝大家對創(chuàng)新互聯(lián)網(wǎng)站的支持!