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