本文已授權微信公衆號fanfan程序媛獨家發佈
轉載請註明出處,本文出自帶你解鎖藍牙skill
作者爲fanfan
藍牙是設備間的一種短距離的無線近場通信。對通信距離,通訊速率,頻段等都有相關的規定,具體可自行百度百科。
生活中最常見的諸如藍牙耳機,藍牙音箱,智能家居也有很多藍牙(但對距離和速率有一定的限制)。
藍牙之所以可以實現上述這些功能,是因爲在藍牙中規定了藍牙協議,來提供一些接口供開發商使用。
協議是什麼??協議是說在通信過程中設備所遵循的一種規則
爲了更方便的瞭解藍牙是什麼,我們就藉助藍牙協議來看一看藍牙到底能幹什麼??
首先明確一下,目前市面上的Android機的源碼大致跟三方面有關係(只考慮藍牙profile)
profile\Android版本 | Android2.1 | Android4.4 | Android5.0.0 | Android6.0.0 | Android7.1.1 |
---|---|---|---|---|---|
API | 7(ECLAIR_MR1) | 19(KITKAT) | 21(LOLLIPOP) | 23(M) | 25(N) |
發佈時間 | 2010-01 | 2013-10 | 2014-11 | 2015 | 2016 |
OppProfile | ✔ | ✔ | ✔ | ✔ | |
PanProfile | ✔ | ✔ | ✔ | ✔ | |
PbapServerProfile | ✔ | ✔ | ✔ | ✔ | |
PbapClientProfile | ✔ | ||||
A2dpProfile | ✔ | ✔ | ✔ | ✔ | |
A2dpSinkProfile | ✔ | ||||
HeadsetProfile | ✔ | ✔ | ✔ | ✔ | |
HfpClientProfile | ✔ | ||||
HidProfile | ✔ | ✔ | ✔ | ✔ | |
MapProfile | ✔ | ✔ | ✔ | ✔ | |
SapProfile | ✔ | ✔ |
接下來以Android7.1.1爲例,分析profile相關
含義 | 作用 | 舉例 | |
---|---|---|---|
OppProfile | Object Push Profie | 文件傳輸協議:用於藍牙設備間的文件傳輸 | 手機間的文件傳輸 |
PanProfile | Personal Area Networking Profile | 個人局域網協議:(有三個角色NAP,PANU,GN)設備一方開啓藍牙網絡共享給其他設備使用 | 手機上的藍牙共享網絡 |
PbapServerProfile | Phone Book Access Profile(PSE) | 讀取聯繫人協議:作爲server,本設備的聯繫人可共享給其他設備 | 提供聯繫人列表 |
PbapClientProfile | Phone Book Access Profile(PCE) | 讀取聯繫人協議:作爲client角色,本設備可讀取server端的聯繫人 | 讀取聯繫人列表 |
A2dpProfile | Advanced Audio Distribution Profile(SRC:Source) | 高級音頻分發協議:作爲server提供音頻源 | 例如可以提供音頻源的手機 |
A2dpSinkProfile | Advanced Audio Distribution Profile(SINK) | 高級音頻分發協議:作爲client播放接收到的音頻 | 車載藍牙,藍牙音響 |
HeadsetProfile | Headset Profile | 耳機協議:提供手機音頻 | 連接藍牙耳機 |
HfpClientProfile | Hands-Free Profile | 免提設備:播放音頻 | 藍牙耳機 |
HidProfile | Human Interface Device | 人機接口設備 | 藍牙鼠標,藍牙鍵盤 |
MapProfile | Message Access Profile | 讀取短消息協議 | |
SapProfile | SIM Access Profile | 讀取sim卡協議 |
在學習這些協議代碼之前,先來看看各種協議都是幹什麼的?我們如何復現?
用於兩個藍牙設備間進行文件傳輸。有發送方和接受方之分
所以藍牙設備的發送方和接受方是根據誰發送文件而決定的,設備既可以是發送方和接收方。
實現文件傳輸需要以下條件
接下來就可以進行文件傳輸了,至於最終傳輸結果,還很未知啊。
這就好比相親,旁人能撮合的能提供的就到這裏了(相當於文件傳輸的前提條件,見以上三條),至於能不能成,還得看雙方的意見(接收方是否同意接受和發送方是否停止發送,見下文)。但不管能不能成,所謂是雁過留痕,這事兒已經是經歷了總要存在記憶裏(發送方是傳出歷史記錄,接收方是傳入歷史記錄),每一條記憶都記錄了事情的結果,原因,時間,等各種詳細信息。唯一不同的是記憶無法刪除,但是機器設備中的記錄是在查看後自動清除。
選擇文件–>分享–>藍牙
其中所顯示的可用設備包括三部分
如果是向已經關閉的藍牙設備發送文件,會提示連接錯誤
如果向已經和其他設備連接的藍牙設備發送設備,依舊能夠成功,但是接收方的當前連接會被斷開,被與Sender的文件傳輸所取代。
如果已經滿足文件傳輸條件,則準備上傳文件
此時只是準備發送文件。
如果Sender此時選擇停止。則會出現
文件傳輸會停止,並提示,用戶取消上傳。
在Sender的傳出歷史記錄中可以看到所傳出的文件列表
點擊每個文件可以看到傳輸詳情
在有文件傳輸進來時,會通知receiver
receiver可以選擇拒絕或者接受。
在傳入文件記錄中會顯示所有通過藍牙發送過來的文件
話不多說,對於OppProfile的基本情況就是這樣了,如果有任何疑問可以掃描右下方二維碼或者點擊左上方藍色區域獲取到二維碼或者是微信搜索公衆號:fanfan程序媛,關注我的微信公衆號留言吧~~
個人局域網有三個角色,說白了其實就是一個藍牙網絡共享的功能
前提條件:
文章寫到這裏,不得不提我工作中遇到的一個相關的問題。
有次我們公司的測試發來一個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,此時,停止騎車(即斷開互聯網連接),雙方交換角色後繼續前進~~
對於PanProfile的第二中角色,暫時還未碰到,列爲todo吧,或者有了解的可以普及一下。
累呀~~感覺好玩兒的話就動手點個贊吧,更多精彩技術故事盡在我的微信公衆號
我又開完樂了,此公衆號爲藍牙技術公衆號,歡迎關注,歡迎吐槽