1. 程式人生 > 實用技巧 >Android藍芽開發(一)藍芽模組及核心API

Android藍芽開發(一)藍芽模組及核心API

本文主要介紹Android藍芽開發中基礎知識:藍芽模組及核心API。

關於藍芽的連線及通訊功能實現,歡迎查閱下一篇文章:Android藍芽開發(二)藍芽訊息傳輸實現。

藍芽模組

從藍芽4.0開始包含兩個藍芽晶片模組:

傳統/經典藍芽模組(Classic Bluetooth,簡稱BT)和低功耗藍芽(Bluetooth Low Energy,簡稱BLE)。

經典藍芽是在之前的藍芽1.0,1.2,2.0+EDR,2.1+EDR,3.0+EDR等基礎上發展和完善起來的, 而低功耗藍芽是Nokia的Wibree標準上發展起來的,是完全不同兩個標準。

1. 經典藍芽模組(BT)

泛指藍芽4.0以下的模組,一般用於資料量比較大的傳輸,如:語音、音樂、較高資料量傳輸等。

經典藍芽模組可再細分為:傳統藍芽模組和高速藍芽模組。

傳統藍芽模組在2004年推出,主要代表是支援藍芽2.1協議的模組,在智慧手機爆發的時期得到廣泛支援。

高速藍芽模組在2009年推出,速率提高到約24Mbps,是傳統藍芽模組的八倍。

傳統藍芽有3個功率級別:Class1、Class2、Class3,分別支援100m,10m,1m的傳輸距離。

用途:

  • 傳聲音

    如藍芽耳機、藍芽音箱。藍芽設計的時候就是為了傳聲音的,所以是近距離的音訊傳輸的不二選擇。現在也有基於WIFI的音訊傳輸方案,例如Airplay等,但是WIFI功耗比藍芽大很多,裝置無法做到便攜。因此固定的音響有WIFI的,移動的如耳機、便攜音箱清一色都是基於經典藍芽協議的。

  • 傳大量資料

    如某些工控場景,使用Android或Linux主控,外掛藍芽遙控裝置的,可以使用經典藍芽裡的SPP協議,當作一個無線串列埠使用。速度比BLE傳輸快多了。這裡要注意的是,iPhone沒有開放。

2. 低功耗藍芽模組(BLE)

泛指藍芽4.0及更高的模組,藍芽低功耗技術是低成本、短距離、可互操作的魯棒性無線技術,工作在免許可的2.4GHz ISM射頻頻段。

因為BLE技術採用非常快速的連線方式,因此平時可以處於“非連線”狀態(節省能源),此時鏈路兩端相互間只是知曉對方,只有在必要時才開啟鏈路,然後在儘可能短的時間內關閉鏈路(每次最多傳輸20位元組)。

低功耗藍芽無功率級別,一般傳送功率在7dBm,一般在空曠距離,達到20m應該是沒有問題。

隨著藍芽5.0的釋出,其效能有了大幅提升,主要體現在以下幾個方面:

  • 高速傳輸:其傳輸速率達到了 24Mbps 是藍芽 4.2LE 的兩倍

  • 傳輸距離:其傳輸的有效距離是上一版本的 4 倍,理論上,藍芽發射和接收裝置之間的有效工作距離可達 300 米。

  • 精準定位:結合 wifi 可以實現精度小於 1 米的室內定位

  • 超低功耗:藍芽 5.0 將大大降低了藍芽的功耗,使人們在使用藍芽的過程中再也不必擔心待機時間短的問題。

用途:

耗電低,資料量小,如遙控類(滑鼠、鍵盤),感測裝置(心跳帶、血壓計、溫度感測器、共享單車鎖、智慧鎖、防丟器、室內定位)是目前手機和智慧硬體通訊的價效比最高的手段,直線距離約50米,一節5號電池能用一年,傳輸模組成本10塊錢,遠比WIFI4G等大資料量的通訊協議更實用。雖然藍芽距離近了點,但勝在直連手機,價格超便宜。以室內定位為例,商場每家門店掛個藍芽beacon,就可以對手機做到精度10米級的室內定位,一個beacon的價格也就幾十塊錢而已。

3. 雙模藍芽

雙模藍芽指的是既有經典藍芽也有低功耗藍芽模組。

如智慧電視遙控器、降噪耳機等。很多智慧電視配的遙控器帶有語音識別,需要用經典藍芽才能傳輸聲音。而如果做複雜的按鍵,例如原本鍵盤表上沒有的功能,經典藍芽的HID按鍵協議就不行了,得用BLE做私有協議。包括很多降噪耳機上通過APP來調節降噪效果,也是通過BLE來實現的私有通訊協議。

Android手機藍芽4.x都是雙模藍芽(既有經典藍芽也有低功耗藍芽),而某些藍芽裝置為了省電是單模(只支援低功耗藍芽)。

Android藍芽API簡介

1. 經典藍芽(Classic Bluetooth)

經典藍芽適用於電池使用強度較大的操作,例如Android之間流式傳輸和通訊等(音訊/檔案等大資料)。 從Android 4.3(API 18)才有API支援低功耗藍芽(BLE)。

經典藍芽API如下:

android.bluetooth

.BluetoothA2dp 音訊分發配置檔案,高質量音訊通過藍芽連線和流式傳輸

.BluetoothAdapter 本地藍芽介面卡,是所有藍芽互動的入口,發現裝置,查詢配對裝置,建立BluetoothServerSocket偵聽其他裝置

.BluetoothAssignedNumbers

.BluetoothClass 描述藍芽裝置的一般特徵和功能,這是一組只讀屬性,裝置型別提示

.BluetoothDevice 遠端藍芽裝置,與某個遠端裝置建立連線,查詢裝置資訊,名稱,地址,類和配對狀態

.BluetoothHeadset 提供藍芽耳機支援,以便與手機配合使用,藍芽耳機和擴音配置檔案

.BluetoothHealth 控制藍芽服務的健康裝置配置檔案代理

.BluetoothHealthAppConfiguration 第三方藍芽健康應用註冊的應用配置,以便與遠端藍芽健康裝置通訊

.BluetoothHealthCallback 實現 BluetoothHealth 回撥的抽象類

.BluetoothManager

.BluetoothProfile 藍芽配置檔案,藍芽通訊的無線介面規範

.BluetoothServerSocket 服務端監聽,連線RFCOMM通道(類似TCP ServerSocket)

.BluetoothSocket 建立RFCOMM通道,藍芽Socket介面(類似TCP Socket),通過InputStream和OutputStream與其他裝置傳輸資料

Android經典藍芽的開發步驟如下:

  1. 掃描其他藍芽裝置

  2. 查詢本地藍芽介面卡的配對藍芽裝置

  3. 建立 RFCOMM 通道 (SPP協議)

  4. 通過服務發現連線到其他裝置

  5. 與其他裝置進行雙向資料傳輸

  6. 管理多個連線

RFCOMM是藍芽簡單傳輸協議, 在兩個藍芽裝置間的一條物理鏈上提供多個模擬串列埠進行傳輸資料, 可同時保持高達60路的通訊連線。

SPP(Serial Port Profile)是通過藍芽裝置之間的串列埠進行資料傳輸協議,spp協議處於RFCOMM上層, 如果能使用RFCOMM傳輸資料,就不需要使用SPP(省去一些流程,速度更快),但還是推薦用SPP,相容性有保證

2. 低功耗藍芽(BLE)

從Android 4.3(API 18)才支援低功耗藍芽(Bluetooth Low Energy,BLE)的核心功能,BLE藍芽協議是GATT協議, BLE相關類不多, 全都位於android.bluetooth包和android.bluetooth.le包的幾個類:

android.bluetooth

.BluetoothGattService 包含多個Characteristic(屬性特徵值), 含有唯一的UUID作為標識

.BluetoothGattCharacteristic 包含單個值和多個Descriptor, 含有唯一的UUID作為標識

.BluetoothGattDescriptor 對Characteristic進行描述, 含有唯一的UUID作為標識

.BluetoothGatt 客戶端相關

.BluetoothGattCallback 客戶端連接回調

.BluetoothGattServer 服務端相關

.BluetoothGattServerCallback 服務端連接回調

android.bluetooth.le

.AdvertiseCallback 服務端的廣播回撥

.AdvertiseData 服務端的廣播資料

.AdvertiseSettings 服務端的廣播設定

.BluetoothLeAdvertiser 服務端的廣播

.BluetoothLeScanner 客戶端掃描相關(Android5.0新增)

.ScanCallback 客戶端掃描回撥

.ScanFilter 客戶端掃描過濾

.ScanRecord 客戶端掃描結果的廣播資料

.ScanResult 客戶端掃描結果

.ScanSettings 客戶端掃描設定

BLE裝置分為兩種裝置: 客戶端(也叫主機/中心裝置/Central), 服務端(也叫從機/外圍裝置/peripheral) 客戶端的核心類是 BluetoothGatt

服務端的核心類是 BluetoothGattServer 和 BluetoothLeAdvertiser BLE資料的核心類是 BluetoothGattCharacteristic 和 BluetoothGattDescriptor

本文的內容暫到此結束,下一篇中將詳細介紹藍芽的連線及通訊功能實現。

參考資料:

Android-經典藍芽(BT)-建立長連線傳輸短訊息和檔案

歡迎點贊/評論,你們的贊同和鼓勵是我寫作的最大動力!

關注公眾號:幾圈年輪,檢視更多有趣的技術資源。