本文主要介紹Android藍(lán)牙開發(fā)中基礎(chǔ)知識:藍(lán)牙模塊及核心API辐益。
關(guān)于藍(lán)牙的連接及通訊功能實現(xiàn)智政,歡迎查閱下一篇文章:Android藍(lán)牙開發(fā)(二)藍(lán)牙消息傳輸實現(xiàn)。
藍(lán)牙模塊
從藍(lán)牙4.0開始包含兩個藍(lán)牙芯片模塊:
傳統(tǒng)/經(jīng)典藍(lán)牙模塊(Classic Bluetooth续捂,簡稱BT)和低功耗藍(lán)牙(Bluetooth Low Energy,簡稱BLE)劫拗。
經(jīng)典藍(lán)牙是在之前的藍(lán)牙1.0页慷,1.2,2.0+EDR滓彰,2.1+EDR州袒,3.0+EDR等基礎(chǔ)上發(fā)展和完善起來的, 而低功耗藍(lán)牙是Nokia的Wibree標(biāo)準(zhǔn)上發(fā)展起來的,是完全不同兩個標(biāo)準(zhǔn)他匪。
1. 經(jīng)典藍(lán)牙模塊(BT)
泛指藍(lán)牙4.0以下的模塊夸研,一般用于數(shù)據(jù)量比較大的傳輸,如:語音畦徘、音樂抬闯、較高數(shù)據(jù)量傳輸?shù)取?/p>
經(jīng)典藍(lán)牙模塊可再細(xì)分為:傳統(tǒng)藍(lán)牙模塊和高速藍(lán)牙模塊关筒。
傳統(tǒng)藍(lán)牙模塊在2004年推出蒸播,主要代表是支持藍(lán)牙2.1協(xié)議的模塊,在智能手機(jī)爆發(fā)的時期得到廣泛支持胀屿。
高速藍(lán)牙模塊在2009年推出包雀,速率提高到約24Mbps,是傳統(tǒng)藍(lán)牙模塊的八倍葡兑。
傳統(tǒng)藍(lán)牙有3個功率級別:Class1、Class2吆鹤、Class3洲守,分別支持100m,10m知允,1m的傳輸距離婴削。
用途:
-
傳聲音
如藍(lán)牙耳機(jī)、藍(lán)牙音箱嗤朴。藍(lán)牙設(shè)計的時候就是為了傳聲音的虫溜,所以是近距離的音頻傳輸?shù)牟欢x擇。現(xiàn)在也有基于WIFI的音頻傳輸方案吱雏,例如Airplay等瘾境,但是WIFI功耗比藍(lán)牙大很多迷守,設(shè)備無法做到便攜。因此固定的音響有WIFI的凯力,移動的如耳機(jī)礼华、便攜音箱清一色都是基于經(jīng)典藍(lán)牙協(xié)議的。
-
傳大量數(shù)據(jù)
如某些工控場景祈惶,使用Android或Linux主控,外掛藍(lán)牙遙控設(shè)備的行瑞,可以使用經(jīng)典藍(lán)牙里的SPP協(xié)議血久,當(dāng)作一個無線串口使用。速度比BLE傳輸快多了讹蘑。這里要注意的是筑舅,iPhone沒有開放。
2. 低功耗藍(lán)牙模塊(BLE)
泛指藍(lán)牙4.0及更高的模塊版仔,藍(lán)牙低功耗技術(shù)是低成本误墓、短距離、可互操作的魯棒性無線技術(shù)然想,工作在免許可的2.4GHz ISM射頻頻段欣范。
因為BLE技術(shù)采用非潮湫梗快速的連接方式,因此平時可以處于“非連接”狀態(tài)(節(jié)省能源)恼琼,此時鏈路兩端相互間只是知曉對方妨蛹,只有在必要時才開啟鏈路,然后在盡可能短的時間內(nèi)關(guān)閉鏈路(每次最多傳輸20字節(jié))晴竞。
低功耗藍(lán)牙無功率級別滑燃,一般發(fā)送功率在7dBm,一般在空曠距離颓鲜,達(dá)到20m應(yīng)該是沒有問題。
隨著藍(lán)牙5.0的發(fā)布典予,其性能有了大幅提升甜滨,主要體現(xiàn)在以下幾個方面:
高速傳輸:其傳輸速率達(dá)到了 24Mbps 是藍(lán)牙 4.2LE 的兩倍
傳輸距離:其傳輸?shù)挠行Ь嚯x是上一版本的 4 倍瘤袖,理論上衣摩,藍(lán)牙發(fā)射和接收設(shè)備之間的有效工作距離可達(dá) 300 米。
精準(zhǔn)定位:結(jié)合 wifi 可以實現(xiàn)精度小于 1 米的室內(nèi)定位
超低功耗:藍(lán)牙 5.0 將大大降低了藍(lán)牙的功耗,使人們在使用藍(lán)牙的過程中再也不必?fù)?dān)心待機(jī)時間短的問題艾扮。
用途:
耗電低既琴,數(shù)據(jù)量小,如遙控類(鼠標(biāo)泡嘴、鍵盤)甫恩,傳感設(shè)備(心跳帶、血壓計酌予、溫度傳感器磺箕、共享單車鎖、智能鎖抛虫、防丟器松靡、室內(nèi)定位)是目前手機(jī)和智能硬件通信的性價比最高的手段,直線距離約50米建椰,一節(jié)5號電池能用一年雕欺,傳輸模組成本10塊錢,遠(yuǎn)比WIFI
棉姐、4G
等大數(shù)據(jù)量的通信協(xié)議更實用屠列。雖然藍(lán)牙距離近了點,但勝在直連手機(jī)谅海,價格超便宜脸哀。以室內(nèi)定位為例,商場每家門店掛個藍(lán)牙beacon扭吁,就可以對手機(jī)做到精度10米級的室內(nèi)定位撞蜂,一個beacon的價格也就幾十塊錢而已。
3. 雙模藍(lán)牙
雙模藍(lán)牙指的是既有經(jīng)典藍(lán)牙也有低功耗藍(lán)牙模塊侥袜。
如智能電視遙控器蝌诡、降噪耳機(jī)等。很多智能電視配的遙控器帶有語音識別枫吧,需要用經(jīng)典藍(lán)牙才能傳輸聲音浦旱。而如果做復(fù)雜的按鍵,例如原本鍵盤表上沒有的功能九杂,經(jīng)典藍(lán)牙的HID按鍵協(xié)議就不行了颁湖,得用BLE做私有協(xié)議。包括很多降噪耳機(jī)上通過APP來調(diào)節(jié)降噪效果例隆,也是通過BLE來實現(xiàn)的私有通信協(xié)議甥捺。
Android手機(jī)藍(lán)牙4.x都是雙模藍(lán)牙(既有經(jīng)典藍(lán)牙也有低功耗藍(lán)牙),而某些藍(lán)牙設(shè)備為了省電是單模(只支持低功耗藍(lán)牙)镀层。
Android藍(lán)牙API簡介
1. 經(jīng)典藍(lán)牙(Classic Bluetooth)
經(jīng)典藍(lán)牙適用于電池使用強(qiáng)度較大的操作镰禾,例如Android之間流式傳輸和通信等(音頻/文件等大數(shù)據(jù))。 從Android 4.3(API 18)才有API支持低功耗藍(lán)牙(BLE)。
經(jīng)典藍(lán)牙API如下:
android.bluetooth
.BluetoothA2dp 音頻分發(fā)配置文件,高質(zhì)量音頻通過藍(lán)牙連接和流式傳輸
.BluetoothAdapter 本地藍(lán)牙適配器,是所有藍(lán)牙交互的入口,發(fā)現(xiàn)設(shè)備,查詢配對設(shè)備,創(chuàng)建BluetoothServerSocket偵聽其他設(shè)備
.BluetoothAssignedNumbers
.BluetoothClass 描述藍(lán)牙設(shè)備的一般特征和功能,這是一組只讀屬性,設(shè)備類型提示
.BluetoothDevice 遠(yuǎn)程藍(lán)牙設(shè)備,與某個遠(yuǎn)程設(shè)備建立連接,查詢設(shè)備信息,名稱,地址,類和配對狀態(tài)
.BluetoothHeadset 提供藍(lán)牙耳機(jī)支持,以便與手機(jī)配合使用,藍(lán)牙耳機(jī)和免提配置文件
.BluetoothHealth 控制藍(lán)牙服務(wù)的健康設(shè)備配置文件代理
.BluetoothHealthAppConfiguration 第三方藍(lán)牙健康應(yīng)用注冊的應(yīng)用配置吴侦,以便與遠(yuǎn)程藍(lán)牙健康設(shè)備通信
.BluetoothHealthCallback 實現(xiàn) BluetoothHealth 回調(diào)的抽象類
.BluetoothManager
.BluetoothProfile 藍(lán)牙配置文件,藍(lán)牙通信的無線接口規(guī)范
.BluetoothServerSocket 服務(wù)端監(jiān)聽,連接RFCOMM通道(類似TCP ServerSocket)
.BluetoothSocket 建立RFCOMM通道,藍(lán)牙Socket接口(類似TCP Socket),通過InputStream和OutputStream與其他設(shè)備傳輸數(shù)據(jù)
Android經(jīng)典藍(lán)牙的開發(fā)步驟如下:
掃描其他藍(lán)牙設(shè)備
查詢本地藍(lán)牙適配器的配對藍(lán)牙設(shè)備
建立 RFCOMM 通道 (SPP協(xié)議)
通過服務(wù)發(fā)現(xiàn)連接到其他設(shè)備
與其他設(shè)備進(jìn)行雙向數(shù)據(jù)傳輸
管理多個連接
RFCOMM是藍(lán)牙簡單傳輸協(xié)議, 在兩個藍(lán)牙設(shè)備間的一條物理鏈上提供多個模擬串口進(jìn)行傳輸數(shù)據(jù), 可同時保持高達(dá)60路的通信連接屋休。
SPP(Serial Port Profile)是通過藍(lán)牙設(shè)備之間的串口進(jìn)行數(shù)據(jù)傳輸協(xié)議,spp協(xié)議處于RFCOMM上層, 如果能使用RFCOMM傳輸數(shù)據(jù),就不需要使用SPP(省去一些流程,速度更快),但還是推薦用SPP,兼容性有保證
2. 低功耗藍(lán)牙(BLE)
從Android 4.3(API 18)才支持低功耗藍(lán)牙(Bluetooth Low Energy备韧,BLE)的核心功能劫樟,BLE藍(lán)牙協(xié)議是GATT協(xié)議, BLE相關(guān)類不多, 全都位于android.bluetooth包和android.bluetooth.le包的幾個類:
android.bluetooth
.BluetoothGattService 包含多個Characteristic(屬性特征值), 含有唯一的UUID作為標(biāo)識
.BluetoothGattCharacteristic 包含單個值和多個Descriptor, 含有唯一的UUID作為標(biāo)識
.BluetoothGattDescriptor 對Characteristic進(jìn)行描述, 含有唯一的UUID作為標(biāo)識
.BluetoothGatt 客戶端相關(guān)
.BluetoothGattCallback 客戶端連接回調(diào)
.BluetoothGattServer 服務(wù)端相關(guān)
.BluetoothGattServerCallback 服務(wù)端連接回調(diào)
android.bluetooth.le
.AdvertiseCallback 服務(wù)端的廣播回調(diào)
.AdvertiseData 服務(wù)端的廣播數(shù)據(jù)
.AdvertiseSettings 服務(wù)端的廣播設(shè)置
.BluetoothLeAdvertiser 服務(wù)端的廣播
.BluetoothLeScanner 客戶端掃描相關(guān)(Android5.0新增)
.ScanCallback 客戶端掃描回調(diào)
.ScanFilter 客戶端掃描過濾
.ScanRecord 客戶端掃描結(jié)果的廣播數(shù)據(jù)
.ScanResult 客戶端掃描結(jié)果
.ScanSettings 客戶端掃描設(shè)置
BLE設(shè)備分為兩種設(shè)備: 客戶端(也叫主機(jī)/中心設(shè)備/Central), 服務(wù)端(也叫從機(jī)/外圍設(shè)備/peripheral) 客戶端的核心類是 BluetoothGatt
服務(wù)端的核心類是 BluetoothGattServer 和 BluetoothLeAdvertiser BLE數(shù)據(jù)的核心類是 BluetoothGattCharacteristic 和 BluetoothGattDescriptor
相關(guān)詳細(xì)內(nèi)容及使用請查看我的Github:https://github.com/MickJson/BluetoothCS
參考資料:
Android-經(jīng)典藍(lán)牙(BT)-建立長連接傳輸短消息和文件
歡迎點贊/評論,你們的贊同和鼓勵是我寫作的最大動力盯蝴!