藍牙配對在安卓系統中的流程分析

2020-12-20 Connectivity

安卓系統藍牙配對流程分析

配對流程基本上始於首次連接一個藍牙設備的過程中,本端的搜索流程結束獲取到該設備的BluetoothDevice信息,就可以開啟配對流程。

配對,顧名思義就是將兩個設備通過相關技術進行綁定,達到能夠互相識別彼此的目的。因此通過藍牙技術進行的配對就是大家理解中的藍牙配對。隨著藍牙技術在消費市場上越來越普及,生活中很容易就能遇到藍牙配對這一使用藍牙功能事必不可缺失的步驟。本期我們就簡單聊聊安卓系統藍牙配對的流程是如何運行的。

Application通過framework層BluetoothDevice對外提供的接口createBond()開啟這一流程。createBondOutOfBand()通過OOB技術進行配對的接口,一般很少使用。所以應用層需要根據自己的實際使用場景選擇正確的接口。

藍牙服務層在配對流程中基本沒有複雜的操作,只是簡單地下發指令成功後,通過JNI層的異步回調處理配對狀態變化並將該變化對外廣播。其時序圖如下:

從上圖我們唯一需要注意的點就是配對流程開始前需要停掉搜索掃描流程(如果底層正在進行該流程),增加該操作的主要目的是為了確保配對流程能夠正常進行。因為搜索掃描和配對流程都會對遠端設備進行Discovery操作,防止這兩個流程衝突導致配對失敗。

協議棧接收到開始配對指令後,主要按照如下的配對狀態機進行切換(Numeric Comparison模式):

IDLE:初始狀態值GET_REM_NAME:獲取遠端設備的藍牙名字WAIT_PIN_REQ:等待Controller請求PIN碼WAIT_LOCAL_IOCAPS:等待本端提供IO能力WAIT_NUM_CONFIRM:等待本端Host確認配對WAIT_AUTH_COMPLETE:等待鑑權(配對)流程完成

狀態切換對應到HCI上的交互見下圖:

每一個配對狀態的切換觸發時機從上面這張圖就十分明了,這裡我就不做過多分析。感興趣的同學可以嘗試跟著上圖中HCI命令跟蹤下代碼流程。

協議棧的配對狀態隨著鑑權完成事件Authentication Complete的上報就切換到初始值了,那這時是不是就代表整個配對流程完成了呢?非也,其實在安卓系統中到這裡還不代表配對已經完成,因為上報JNI層的配對狀態變化回調並不是通過鑑權完成事件上報完成而回調的。

配對流程的主要工作完成後,協議棧還會繼續對該設備嘗試進行SDP服務發現,搜索該設備支持哪些協議服務,SDP服務搜索完成後才會上報JNI層配對狀態變成Bonded。

觸發SDP服務搜索的觸發時機是處理上報Link Key的回調bta_dm_new_link_key_cback()中通過 event = BTA_DM_AUTH_CMPL_EVT觸發的。

隨後在函數btif_dm_auth_cmpl_evt()中嘗試對該設備進行SDP服務發現,如下圖:

SDP服務發現完成後通過回調處理函數btif_dm_search_services_evt()中 event = BTA_DM_DISC_RES_EVT上報JNI 層配對狀態變化到Bonded。

至此安卓系統中藍牙配對流程才算閉環完成,上述過程我以Numeric Comparison配對模型為依據介紹了整個流程,其他配對模型類似,就不一一做出說明了,但協議棧配對狀態機的全部值如下,其他模型的配對流程也是在這幾種狀態機組合下進行切換運行的:

配對流程實際上並不是孤立而存在的,配合著搜索掃描、連接等流程共同起作用的,彼此依賴,缺一不可。

本期的分享就到這裡,感興趣的小夥伴歡迎私信留言一起討論。

相關焦點

  • 藍牙音樂SRC端的安卓實現
    藍牙音樂SRC側的安卓實現隨著電子產品的普及,越來越多的年輕人熱衷於使用藍牙技術來播放歌曲(相當多的手機品牌取消了耳機插孔),本篇文章就和大家聊聊藍牙音樂SRC端在安卓系統中的實現原理。安卓系統參考版本:Android-9藍牙SRC側播放藍牙音樂,音頻數據都是從安卓音頻系統發送過來的,藍牙協議棧接收到音頻數據處理再發送到SNK端進行播放,整體的流程大概如下圖所示:紅色框圖標註的部分就是我們今天探討的內容,在對藍牙音樂SRC介紹之前,我們得簡單了解下安卓中音頻系統
  • 安卓系統應用啟動流程分析
    隨著移動開發的興起,安卓系統的重要性愈加突顯。本文簡要介紹安卓系統上應用啟動流程,對於應用開發、系統定製以及性能優化人員來說,熟悉應用啟動流程會使得在今後的工作中更加得心應手,做到知其然,知其所以然。本文主要面向開發人員,假定讀者已有一定的安卓基礎。本文以安卓P版本為基礎,不同安卓版本上應用啟動流程略有差異,但核心邏輯仍然一致。
  • 新版Android系統不用配對即可連接藍牙
    月初的時候Google放出了最新版的Android 2.3.3薑餅系統SDK,NFC近場通信終於得到全面的支持,Google也在新版SDK中加入了一些有意思的API開發接口。NFC近場通信技術目前在手機上的應用主要是手機刷卡支付,比如手機公交卡、手機信用卡等等,但是NFC的能力不僅僅只有這些,其近距離無線通信的功能還會有更多的拓展。
  • 安卓將改進藍牙管理,適應真無線耳機
    蘋果推出的真無線耳機AirPods雖然沒有過人的音質表現,但是勝在使用方便:打開充電盒就能配對,一拿一放就可使用。這樣的方便,相比傳統的藍牙連接需要設備進行雙向配對操作來說,可以是天翻地覆的進步,AirPods也因此成了最受歡迎的真無線耳機。
  • 車上的藍牙怎樣連手機,車載藍牙怎麼連接手機
    車藍牙怎樣和手機配對,車上的藍牙怎樣連手機?下面是具體的操作指南:1、首先打開手機的藍牙並設置為「所有人可見」,安卓系統的手機建議開啟USB調試模式;2、打開車輛車載屏幕的藍牙設置功能,開啟藍牙功能;3、在手機上搜索藍牙設備,查找之後選中進行配對連接
  • 安卓源碼避坑指南3——撥打電話的SIM卡無效導致藍牙斷開連接
    測試環境:Android 9的車機系統 + 手機中的SIM卡為無效SIM卡測試步驟:車機和手機使用藍牙相互連接成功車機端主動撥打電話測試現象:由於手機中SIM卡為無效電話卡所以電話撥打失敗,但是幾秒鐘過後手機與車機間的藍牙連接斷開當看到這麼個場景+問題現象後,我是懵逼的,打個電話藍牙連接就斷開,這麼牛逼的嗎?
  • 如何利用安卓APP來調試藍牙
    隨著物聯網和互聯設備市場的快速增長,Google Play中也出現了越來越多採用藍牙(Bluetooth)的創新應用。越來越多的團隊也開始加入創建安卓藍牙應用的大軍,對於開發者來說,有關藍牙協議棧和API的一些基礎知識至關重要,今天小編就帶大家一探究竟!
  • ROOT大師下載_ROOT大師下載安卓手機版下載-太平洋下載中心
    ROOT大師手機版截圖ROOT大師手機版軟體亮點:1.智能準確的分析系統信息2.安全全面的高級防護措施,ROOT大師自動備份系統關鍵文件,確保root過程中萬無一失。3.快速便捷的簡單操作方式,無論您是大神還是小白,ROOT大師隨時完全掌控自己的愛機。
  • 藍牙配對過程和藍牙連接的建立過程
    本文引用地址:http://www.eepw.com.cn/article/201808/386024.htm平時我們用藍牙耳機聽音樂,和不同的設備共享文件,打電話等,都有一個配對--連接--傳輸數據的過程。藍牙配對過程,其實就是一個認證的過程。為什麼不配對便無法建立連接?
  • 汽車導航怎麼連接手機藍牙
    【太平洋汽車網】首先打開手機的藍牙並設置為「所有人可見」,安卓系統的手機建議開啟USB調試模式;打開車輛車載屏幕的藍牙設置功能,開啟藍牙功能;在手機上搜索藍牙設備,查找之後選中進行配對連接,配對密碼一般為:0000,完成配對後提示連接成功。
  • 2020凱迪拉克XT5藍牙手機與NFC輕鬆配對
    該2020凱迪拉克XT5在下降的周期中增強(或刷新,因為它更普遍知道)帶來了一些變化和更新,以奢侈品牌的中型豪華交叉的。其中包括略有更新的外觀和內飾,切換到凱迪拉克最新的Y-trim級策略以及一系列尖端技術。新技術功能中包括增加了單觸智慧型手機配對,該配對利用了2020年的Cadillac XT5藍牙系統和近場通信(NFC)功能。
  • 小米手錶微信設置/藍牙連接等問題官方詳解
    IT之家11月14日消息 小米手錶近日已經正式開售,首批的小米手錶用戶在日常生活使用中也向官方反饋了一些意見和建議。今日小米生態鏈和產品總監程亮發文回復了首批用戶關注的熱點問題。關於小米手錶上的微信如何設置?
  • 小米手錶怎麼設置微信綁定藍牙連接等問題官方解答
    小米手錶怎麼設置微信綁定藍牙連接等問題官方解答  小米手錶近日已經正式開售,首批的小米手錶用戶在日常生活使用中也向官方反饋了一些意見和建議。今日小米生態鏈和產品總監程亮發文回復了首批用戶關注的熱點問題。  關於小米手錶上的微信如何設置?官方解答表示安卓用戶可以在應用市場下載微信正常使用,在手錶上收發消息都沒有問題。
  • 安卓用什麼藍牙耳機沒有延遲?超低延遲遊戲藍牙耳機推薦
    安卓用什麼藍牙耳機沒有延遲?超低延遲遊戲藍牙耳機推薦 對於遊戲玩家而言,遊戲配樂和遊戲聲音是非常重要的,在遊戲過程中是不希望受到外界幹擾的,選擇遊戲耳機時,電腦遊戲玩家多是選擇頭戴式有線耳機,手遊玩家則較多選擇頭戴式或者入耳式的藍牙耳機,遊戲藍牙耳機音質較好,還有立體音效,可以給玩家帶來更好的畫面感和沉浸感
  • 小米小鋼炮藍牙音箱怎麼與電腦配對連接使用教程
    上一次我跟大家分享了小米小鋼炮藍牙音箱與手機藍牙配對連接的教程,馬上有幾位網友諮詢我關於電腦藍牙連接的問題,為了更好的回答和幫助到大家,這裡小編就不一一回復大家小米小鋼炮藍牙音箱與電腦連接的操作了,下面我來說下小米小鋼炮藍牙音箱怎麼與電腦配對連接使用教程。
  • iPhone XS系列無法與車載系統進行藍牙配對 涉及多款車型
    【極度網-科技犬消息】據外媒Appleinsider報導,蘋果官方支持論壇有少量用戶反映,iPhone XS、iPhone XS Max無法與車載系統進行藍牙配對,而且並不針對某一品牌的車型,起亞、奧迪、斯巴魯、奔馳等車型都有類似問題。
  • 三大系統全能用 Strike M藍牙鍵盤分析
    正如蘋果的軟體不可能安裝在Windows系統,而Windows系統軟體也不可能安裝在Linux上一樣,很多不同系統的電腦、手機、平板外設也不兼容或者兼容性非常差,這讓我們很是苦惱。拿鍵盤來說,很多人都想擁有一個可以直接在任意一臺設備上使用,而且能同時連接幾臺設備的鍵盤,這樣的想法不再是夢,賽鈦客最新推出的STRIKE M藍牙鍵盤讓這一切成為可能。
  • 藍牙, enable協議棧流程
    每個人的時間都是很寶貴的,沒有必要逼著自己,完成這項違背意願的任務分析過程中關於前面兩個文章中分析過的代碼,就不再進行分析可以確定BluetoothManagerService是藍牙系統級別的服務,運行在system進程。並且在開機之後長存,與藍牙的開關狀態無關藍牙開啟的第一個服務是AdapterService,也就是藍牙的入口。
  • 探討NFC在藍牙配對的應用和前景
    用過藍牙的人都知道,尋找藍牙配對的時間,往往要比傳輸文件的時間還要長。在生活節奏越來越快的當下,繁瑣的尋找藍牙進行文件傳輸將影響用戶體驗。而後藍牙還有一個問題就是連接的穩定性不好,如果配對了多個設備,卻不能每一種都自動連接,有時候需要手動連接。而穩定性也不夠,有時候手動連接也會失敗,於是又要重新設置。也就是說藍牙連接的遷移性不好。
  • 錄音筆藍牙配對連接教程
    下面將為大家展示 AiMousys如何與錄音筆進行藍牙配對(Android 手機及QFancy AR68錄音筆為例)。一、安裝AiMousys APP(Android )1.手機掃描下方二維碼,下載 APP,並按引導進行正常安裝。