隨著物聯(lián)網(wǎng)和互聯(lián)設(shè)備市場(chǎng)的快速增長(zhǎng),Google Play中也出現(xiàn)了越來越多采用藍(lán)牙(Bluetooth)的創(chuàng)新應(yīng)用。越來越多的團(tuán)隊(duì)也開始加入創(chuàng)建安卓藍(lán)牙應(yīng)用的大軍,對(duì)于開發(fā)者來說,有關(guān)藍(lán)牙協(xié)議棧和API的一些基礎(chǔ)知識(shí)至關(guān)重要,今天小編就帶大家一探究竟!
只需要幾行調(diào)用高級(jí)API的代碼,你就能通過藍(lán)牙迅速掃描并連接目標(biāo)設(shè)備。若想了解如何在APP中采用低功耗藍(lán)牙技術(shù),或只是想創(chuàng)建樣板文件框架代碼,都可以點(diǎn)擊訪問應(yīng)用加速器套件(App Accelerator Kit)頁(yè)面。
要想讓APP的性能更上一層樓,很有必要先了解一下安卓開發(fā)中的藍(lán)牙API。自從安卓4.3版本(JELLY_BEAN_MR2API Level: 18)中引入了低功耗藍(lán)牙技術(shù)(BluetoothLow EnergyTechnology)的特性以來,面向安卓的SDK和藍(lán)牙協(xié)議棧就在不斷演進(jìn)。
從安卓5.0開始(APILevel: 21),添加了新的android.bluetooth.le數(shù)據(jù)包。對(duì)于有些藍(lán)牙操作,可能有多種實(shí)現(xiàn)方式。因此,你需要確認(rèn)用戶操作系統(tǒng)版本和API等級(jí),以更好地了解藍(lán)牙SDK的功能。
不同手機(jī)上的藍(lán)牙功能和特性也有可能不同。以BluetoothLeAdvertiser類為例,并不是所有的手機(jī)都支持”HAL-enabledfeatures”特性,開發(fā)者需要特別調(diào)用函數(shù)BluetoothAdapter.isMultipleAdvertisementSupported(),以確認(rèn)其在當(dāng)前設(shè)備上是否支持。
在開發(fā)者選項(xiàng)中,可以使能藍(lán)牙HCI日志,這是一個(gè)非常有用的工具--“HCI信息收集日志(HCI snoop log)”(4.4以上版本)。
它在協(xié)議棧中就像個(gè)鉤子,能夠捕捉到所有的HCI數(shù)據(jù)包并將其寫入到一個(gè)文件當(dāng)中。大部分安卓設(shè)備的日志文件位于/sdcard/btsnoop_hci.log。可以通過這篇文章詳細(xì)了解如何設(shè)置工具并檢索信息。
同時(shí),第三方的調(diào)試工具,例如北歐半導(dǎo)體(Nordic Semiconductor)提供的一款面向安卓的工具--“nRF Master Control Panel”,其與在iOS使用的“LightBlue”非常類似。這款A(yù)PP能作為GAP/GATT客戶端為開發(fā)者獲取很多信息。它還能模擬安卓GATT服務(wù)器。更強(qiáng)的是,它還能顯示通信范圍內(nèi)廣播的實(shí)時(shí)RSSI圖形。這一工具可在Google Play中獲取。
了解連接間隔(Connection Interval)
藍(lán)牙連接間隔是APP的一組重要參數(shù)。為了平衡功耗和性能,你需要針對(duì)特定用例進(jìn)行參數(shù)微調(diào)。
在 GAP (通用訪問配置文件)層,外圍設(shè)備發(fā)出廣播,中央設(shè)備來接收。然后中央設(shè)備發(fā)起連接,外圍設(shè)備接受連接請(qǐng)求。當(dāng)中央設(shè)備發(fā)起藍(lán)牙連接時(shí),會(huì)發(fā)出包含一系列連接參數(shù)的連接請(qǐng)求(connect_req)。
連接間隔(Connection interval)
從設(shè)備延遲(Slavelatency)
管理超時(shí)(Managementtimeout)
在初始請(qǐng)求中,連接間隔應(yīng)設(shè)為initial_conn-interval,從設(shè)備延遲為零。安卓設(shè)備上的initial_conn_interval(連接建立時(shí)的連接間歇初始值)設(shè)置為7.5ms,這是規(guī)格所允許的最小值。在 7.5ms的間隔下,我們能夠獲取最高的吞吐量,但這也非常耗電(越小的間隔意味著越頻繁的連接事件,進(jìn)而傳輸更多數(shù)據(jù),相應(yīng)地就會(huì)造成更高功耗)。當(dāng)連接建立、中央設(shè)備端的發(fā)起連接活動(dòng)完成后,中央設(shè)備或外圍設(shè)備就能發(fā)出連接參數(shù)更新的請(qǐng)求。這一請(qǐng)求是希望對(duì)方設(shè)備采納的參數(shù)建議。對(duì)方接受建議之后,中央設(shè)備就會(huì)開始進(jìn)行連接參數(shù)更新過程。安卓的這一過程是在BluetoothGatt類中實(shí)施的。需調(diào)用requestConnectionPriority方法更新連接參數(shù)。目前在API Level23中,更新方法支持三組參數(shù):
CONNECTION_PRIORITY_BALANCED
CONNECTION_PRIORITY_HIGH
CONNECTION_PRIORITY_LOW
進(jìn)程如下:
目標(biāo)設(shè)備也可能會(huì)向安卓發(fā)送連接參數(shù)更新請(qǐng)求,希望按照自己的偏好改變間隔。但間隔設(shè)定的最終決定權(quán)還是在主設(shè)備(在鏈路層發(fā)起連接的設(shè)備)。
了解數(shù)據(jù)包(Packet)和流程(Procedure)
藍(lán)牙開發(fā)可用的另一個(gè)強(qiáng)有力的工具就是協(xié)議分析器(protocol analyzer),也就是嗅探器(the sniffer)。本文中我用的是ComProbe BPA低功耗藍(lán)牙協(xié)議分析器,通過它我可以輕松地了解無線通訊情況或判斷問題所在。
當(dāng)我不確定安卓協(xié)議棧和API傳遞的數(shù)據(jù)是否正確時(shí),就會(huì)啟動(dòng)分析器,檢查不同層的細(xì)節(jié)。下面的截圖就顯示了 “Read by type”運(yùn)行的細(xì)節(jié)。我還可以轉(zhuǎn)到 “Handle value pair”,針對(duì)其逐步進(jìn)行調(diào)試。
調(diào)試隱藏活動(dòng)(Invisible Activity)或后臺(tái)服務(wù)(Background Service)
APP不會(huì)一直在前臺(tái)運(yùn)行。任何更高優(yōu)先級(jí)的任務(wù)都可能將你的藍(lán)牙應(yīng)用轉(zhuǎn)變?yōu)椴豢梢娔J?。有時(shí)藍(lán)牙運(yùn)行的實(shí)施是在后臺(tái)的服務(wù)中。多數(shù)情況下,藍(lán)牙不在前臺(tái)時(shí),運(yùn)行可能會(huì)有所不同。在后臺(tái)或服務(wù)中的運(yùn)行場(chǎng)景需經(jīng)過測(cè)試和認(rèn)證。幾乎所有的安卓調(diào)試器都支持一項(xiàng)特性,那就是附加至某一特定進(jìn)程。你只需要找到APP的進(jìn)程ID,將調(diào)試器附加到這一特定進(jìn)程即可。
自從安卓開始支持低功耗藍(lán)牙以來,每一次版本更新都包括了藍(lán)牙協(xié)議棧和API的改進(jìn)。再加上易于開發(fā)者采用的API和工具,安卓正逐漸成為物聯(lián)網(wǎng)生態(tài)系統(tǒng)中最強(qiáng)有力的平臺(tái)。期待不久的將來能夠看到更多創(chuàng)新的安卓應(yīng)用。
本篇作者為:藍(lán)牙技術(shù)聯(lián)盟技術(shù)項(xiàng)目經(jīng)理 高文森先生
原文標(biāo)題:如何利用安卓APP調(diào)試藍(lán)牙
文章出處:【微信公眾號(hào):藍(lán)牙技術(shù)聯(lián)盟】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。
-
藍(lán)牙
+關(guān)注
關(guān)注
114文章
5751瀏覽量
169590 -
安卓
+關(guān)注
關(guān)注
5文章
2116瀏覽量
56959
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
評(píng)論