帶你解鎖藍牙skill(一)
在研究藍牙源碼之前,先來看看藍牙大致都有什麼功能。藍牙模塊支持什麼功能完全由藍牙所支持的藍牙協議而確定,所以先從藍牙協議看起
一,Android各版本與藍牙profile關係
首先明確一下,目前市面上的Android機的源碼大致跟三方面有關係(只考慮藍牙profile)
Google推出的各Android系統:所支持的藍牙協議profile均是開啟狀態
晶元提供商(常見的諸如高通)修改後的Android源碼–開發中稱之為base代碼:新增或者修改某些藍牙profile
開發商拿到base代碼進行進一步加工:新增或者修改某些profile
所以至於你所使用的手機是否支持某個協議就要從這三方面來看了。Android源碼中會告訴你某個原生的Android系統所支持的藍牙profile,晶元提供商也會給你一個相關的藍牙文檔告訴你目前base代碼中所支持的藍牙profile。
但是不同的晶元提供商會有不同的修改,也就是說要說Android版本和藍牙profile一一對應這句話對也不對,只能說原生的Android版本和藍牙profile一一對應。
所以本文從Android源碼的角度分析各Android版本與藍牙profile。(選幾個代表性的Android版本進行分析)
2,profile配置文件簡介
在學習這些協議代碼之前,先來看看各種協議都是幹什麼的?我們如何復現?
1>,OppProfile
用於兩個藍牙設備間進行文件傳輸。有發送方和接受方之分
發送方Sender:發送文件的一方
接收方receiver:接受文件的一方
所以藍牙設備的發送方和接受方是根據誰發送文件而決定的,設備既可以是發送方和接收方。
實現文件傳輸需要以下條件
兩個藍牙設備均支持OppProfile
接受方藍牙處於打開狀態
接收方設備對發送方設備藍牙可見
接下來就可以進行文件傳輸了,至於最終傳輸結果,還很未知啊。
這就好比相親,旁人能撮合的能提供的就到這裡了(相當於文件傳輸的前提條件,見以上三條),至於能不能成,還得看雙方的意見(接收方是否同意接受和發送方是否停止發送,見下文)。但不管能不能成,所謂是雁過留痕,這事兒已經是經歷了總要存在記憶里(發送方是傳出歷史記錄,接收方是傳入歷史記錄),每一條記憶都記錄了事情的結果,原因,時間,等各種詳細信息。唯一不同的是記憶無法刪除,但是機器設備中的記錄是在查看後自動清除。
過程演示說明:
發送方Sender:
選擇文件–>分享–>藍牙
其中所顯示的可用設備包括三部分
已與Sender連接的藍牙設備(但此時接收方藍牙可能處於關閉狀態,只是由於先前進行過配對)
已與Sender配對的藍牙設備(但此時接收方藍牙可能處於關閉狀態,只是由於先前進行過配對)
未與Sender配對的藍牙設備(可能已經與其他設備配對)
如果是向已經關閉的藍牙設備發送文件,會提示連接錯誤
如果向已經和其他設備連接的藍牙設備發送設備,依舊能夠成功,但是接收方的當前連接會被斷開,被與Sender的文件傳輸所取代。
如果已經滿足文件傳輸條件,則準備上傳文件
此時只是準備發送文件。
如果Sender此時選擇停止。則會出現
文件傳輸會停止,並提示,用戶取消上傳。
在Sender的傳出歷史記錄中可以看到所傳出的文件列表
點擊每個文件可以看到傳輸詳情
接收方Receiver:
在有文件傳輸進來時,會通知receiver
receiver可以選擇拒絕或者接受。
在傳入文件記錄中會顯示所有通過藍牙發送過來的文件
2>,PanProfile
個人區域網有三個角色,說白了其實就是一個藍牙網路共享的功能
Network Access Point (NAP) 網路接入點:開啟藍牙網路共享的一方
Group Ad-hoc Network (GN) 群組Ad-hoc網路
PAN User (PANU) 網路使用者:通過藍牙使用網路的一方
前提條件:
雙方設備支持PanProfile
其中一方藍牙共享網路開啟
文章寫到這裡,不得不提我工作中遇到的一個相關的問題。
有次我們公司的測試發來一個bug,說在藍牙配對成功後互聯網無法共享,
首先配對之後界面如下:其中配置文件中的互聯網訪問即為PanProfile
於是乎,bug描述就是,藍牙配對後,點擊互聯網訪問一直選擇不成功…….
在這裡也煩請各位測試大神看一看,互聯網訪問要想成功是先要開啟藍牙共享網路開關的親!!!
藍牙共享網路的開關位於設置–>更多–>網路恭喜與熱點–>藍牙共享網路
可以看到,在配對之後如果想要實現個人區域網,有兩個相關開關,一個是藍牙共享網路開關,一個是互聯網訪問開關。
既然雙方設備均有藍牙共享網路開關,按照藍牙共享網路開關狀態進行區分,那麼就會有三種情況
雙方均不開啟藍牙共享網路開關
其中一方開啟藍牙共享網路開關
雙方均開啟了藍牙共享網路開關
不論是哪種情況,至於第一種情況可以參加上述bug,不再贅述。
第一,只有一方打開了藍牙共享網路開關
那麼此時開啟藍牙共享網路開關的就是Nap–>即網路接入點,選擇互聯網訪問的是PanU–>使用網路方。而且此時設備只能是單一角色(要麼是Nap和PanU),即如果設備A打開了藍牙共享開關,與之配對的設備B未打開藍牙共享開關,此時只能在設備B上選擇開啟互聯網訪問連接。連接成功後如下
提供網路的一方(Nap)顯示:與設備共享本地互聯網連接
使用網路的一方(PanU)顯示:連接到設備以訪問互聯網
在這種情況下,雙方均可以主動斷開互聯網連接。
舉個栗子:
買家和賣家: 商人提供水果(相當於開啟了藍牙網路共享Nap提供網路),等待消費者購買(等待開啟互聯網連接),只有消費者自己才能決定買或者不買(即是否開啟互聯網連接),商人是不能強買強賣的(即無法開啟互聯網連接)。當消費者選擇要買之後,此時可能在買賣過程中發生矛盾,商人不想賣了或者消費者不想買了都會結束本次交易(即斷開設備間的互聯網連接)。道理一致。
好了,繼續!!!
第二,雙方均打開了藍牙共享網路開關
此時雙方均可以作為Nap,也可以作為PanU。與第一種情況的區別就是在開啟互聯網連接之前是無法確定設備是處於什麼角色的。
此時如果在其中一方開啟了互聯網連接,那麼該方在本次互聯網連接過程中作為PanU(使用網路),對方在本次互聯網連接過程中充當Nap(提供網路)。當斷開後,雙方的身份又回到了不能確定的狀態。當再次有一方開啟互聯網連接後,角色才能分配。即每次互聯網連接都會重新分配身份。
按照我的習慣,當然還是會舉個淺顯易懂的栗子,猜猜這次是什麼??
你想到了什麼栗子???
哈哈哈小小調皮一下~~
千呼萬喚的栗子來了!!準備好小板凳了么
前段時間回家路上看到有一個共享單車是帶后座的,好激動,決定來一波共享單車的風:Twins(這不算侵權吧??算的話請一定告訴我!!)要騎一輛帶有后座的共享單車,兩人都有騎車載人的能力(即表示藍牙共享網路開關開啟),現在就會有兩個角色之分:一個是騎車的一個是坐車的。在她們開始騎車之前是無法確定誰是騎車的誰是坐車的(即在互聯網連接之前是無法確定誰作為Nap,誰作為PanU),只有一方比如阿嬌選擇了坐車之後,即選擇享受騎車人帶來的福利(即選擇打開互聯網連接),那麼另一方阿Sa就被動的成為了騎車的人,提供車前進的動力(即Nap,網路提供者)。也許在騎了1km後,阿Sa覺得累了,或者是阿嬌心疼阿Sa,此時,停止騎車(即斷開互聯網連接),雙方交換角色後繼續前進~~
TAG:fanfan程序媛 |
※指紋解鎖+全面屏 華為MateBook X Pro再下一城
※angelababy第一位解鎖《Vogue》中國明星你認可嗎
※Cellebrite可以解鎖任何iPhone
※數據挖掘平台Discover解鎖Tensorflow
※解鎖金屬色,Bling Bling惹人愛!
※以色列公司 Cellebrite 掌握 iOS 漏洞,能為任何一支 iPhone 解鎖
※Sailfish OS終支持Xperia X指紋解鎖
※Gucci主題配色解鎖鴛鴦穿法!Air Jordan 4「White Gucci」曝光!
※優雅、復古、Swag集結號,紅藍CP才是解鎖秋冬的Key words
※Note 9 首發!Samsung 屏下指紋解鎖技術曝光
※Cellebrite高管稱解鎖iPhone是為了「公共安全」
※HomeFacialPro玻尿酸原液,解鎖春日水嫩新肌
※Android Auto用戶有福,Google解除不讓手機解鎖約束
※「圖」WPInternals升級:所有非Lumia系列WP手機均可解鎖
※重溫The lord of the rings,你是怎麼解鎖它呢
※Angelababy解鎖新造型 綵線和秀髮盤成丸子頭
※The Crew2 Closed Alpha版本解鎖
※北服創新園攜手中外嘉賓帶你解鎖Cross-cultural新天地
※Grayshift:可為警方解鎖任何iOS系統的iPhone
※iPhone X 的新解鎖技術:用 Python 編寫 Face ID!