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

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

相關詳細內容及使用請查看Github項目:https://github.com/MickJson/BluetoothCS

參考資料:

Android-經典藍牙(BT)-建立長連接傳輸短消息和文件

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

關注公眾號:幾圈年輪,查看更多有趣的技術資源。
公眾號.png


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM