新聞中心
Android藍(lán)牙數(shù)據(jù)庫:優(yōu)化數(shù)據(jù)傳輸?shù)年P(guān)鍵

隨著移動(dòng)設(shè)備和無線技術(shù)的不斷發(fā)展,藍(lán)牙技術(shù)作為較為成熟的無線通信技術(shù)之一,其應(yīng)用范圍也愈來愈廣泛,而Android藍(lán)牙數(shù)據(jù)庫在優(yōu)化數(shù)據(jù)傳輸方面起到了關(guān)鍵作用。本文將從Android藍(lán)牙數(shù)據(jù)庫的基本架構(gòu)入手,并結(jié)合其在優(yōu)化數(shù)據(jù)傳輸方面所發(fā)揮的重要作用進(jìn)行探討。
一、Android藍(lán)牙數(shù)據(jù)庫基礎(chǔ)架構(gòu)
在Android藍(lán)牙上層協(xié)議棧中,藍(lán)牙數(shù)據(jù)庫是十分重要的一個(gè)組件,主要用來保存已連接藍(lán)牙設(shè)備的重要信息,如設(shè)備名稱、地址、服務(wù)UUID等。Android藍(lán)牙數(shù)據(jù)庫的結(jié)構(gòu)如下圖所示:

Android藍(lán)牙數(shù)據(jù)庫架構(gòu)圖
從圖中可以看出,Android藍(lán)牙數(shù)據(jù)庫主要包括三個(gè)層次,分別是Service、Profile和Device。其功能分別如下:
1. Service層:負(fù)責(zé)藍(lán)牙協(xié)議交互和管理BluetoothGattService等數(shù)據(jù),是整個(gè)Android藍(lán)牙通信的核心,是連接Profile和Device的橋梁。
2. Profile層:定義BluetoothProfile的抽象類,管理所有連接的Device,其主要分為兩類,即Server和Client,分別用來實(shí)現(xiàn)服務(wù)端或客戶端的程序處理邏輯。
3. Device層:管理BluetoothDevice的實(shí)例對(duì)象,例如bluetoothDevice.getProfileConnectionState()方法可用于獲取連接狀態(tài)。
對(duì)于Android應(yīng)用開發(fā)來說,最常用的是Profile層,通過Profile接口實(shí)現(xiàn)與服務(wù)器或客戶端的通信。其中最常用的Profile是BluetoothGatt和BluetoothA2dp,其中BluetoothGatt用于連接和通信廣泛應(yīng)用于智能手表、智能硬件等場(chǎng)景,而BluetoothA2dp則用于音頻傳輸,支持音頻數(shù)據(jù)的高質(zhì)量傳輸和實(shí)時(shí)控制,廣泛應(yīng)用于耳機(jī)、音響等場(chǎng)景。
二、Android藍(lán)牙數(shù)據(jù)庫優(yōu)化數(shù)據(jù)傳輸關(guān)鍵
在藍(lán)牙通信中,數(shù)據(jù)傳輸速率和效率一直是被廣泛關(guān)注的問題之一。針對(duì)這個(gè)問題,Android藍(lán)牙數(shù)據(jù)庫在優(yōu)化數(shù)據(jù)傳輸方面發(fā)揮了關(guān)鍵作用。
Android藍(lán)牙數(shù)據(jù)庫可以優(yōu)化數(shù)據(jù)傳輸存在以下幾個(gè)方面:
1. 編碼方式的優(yōu)化:在數(shù)據(jù)傳輸中,可以選擇更高效的編碼方式,例如base64、gzip等。這能夠有效地減小數(shù)據(jù)的傳輸量,提高效率。
2. 發(fā)送數(shù)據(jù)分塊:在發(fā)送數(shù)據(jù)的過程中,可以采用分塊發(fā)送的方式,將原本一次性發(fā)送的數(shù)據(jù)切成若干小塊逐一發(fā)送。這可以避免數(shù)據(jù)包過大,減小數(shù)據(jù)包的丟失風(fēng)險(xiǎn),從而提高數(shù)據(jù)傳輸?shù)某晒β省?/p>
3. 建立數(shù)據(jù)緩存:在數(shù)據(jù)傳輸時(shí),可以建立數(shù)據(jù)緩存,緩存等待發(fā)送的數(shù)據(jù)。這樣,可以防止之前的數(shù)據(jù)完全發(fā)送完畢,下一個(gè)數(shù)據(jù)包卻已經(jīng)到達(dá)發(fā)送隊(duì)列,從而造成數(shù)據(jù)包混亂的情況。通過建立數(shù)據(jù)緩存,保證數(shù)據(jù)包的有序傳輸,提高數(shù)據(jù)傳輸?shù)某晒β省?/p>
4. 使用隊(duì)列處理數(shù)據(jù):在數(shù)據(jù)傳輸中,可以使用隊(duì)列進(jìn)行數(shù)據(jù)處理,將需要發(fā)送的數(shù)據(jù)按照一定規(guī)則加入到隊(duì)列中,然后再在隊(duì)列中依次取出,這樣能夠避免在發(fā)送數(shù)據(jù)過程中數(shù)據(jù)包的丟失和錯(cuò)位,保證數(shù)據(jù)傳輸?shù)某晒β屎退俾省?/p>
以上幾種優(yōu)化方式都可有效提高藍(lán)牙數(shù)據(jù)傳輸?shù)乃俾屎托?,并在Android藍(lán)牙數(shù)據(jù)庫中有所實(shí)踐。深入研究這些優(yōu)化方式,無疑有助于我們?cè)谌蘸蟮乃{(lán)牙通信中更加高效地進(jìn)行數(shù)據(jù)傳輸。
三、
本文從Android藍(lán)牙數(shù)據(jù)庫的基本架構(gòu)入手,結(jié)合Android藍(lán)牙數(shù)據(jù)庫優(yōu)化數(shù)據(jù)傳輸?shù)南嚓P(guān)知識(shí)進(jìn)行了分析和探討。Android藍(lán)牙數(shù)據(jù)庫通過優(yōu)化編碼方式、分塊發(fā)送、建立數(shù)據(jù)緩存、使用隊(duì)列等方式,讓藍(lán)牙數(shù)據(jù)傳輸變得更加高效和可靠。在日后的藍(lán)牙通信中,結(jié)合這些優(yōu)化方式,我們可以更加高效地進(jìn)行數(shù)據(jù)傳輸,從而為我們的應(yīng)用程序提供更加流暢和快速的體驗(yàn)。
成都網(wǎng)站建設(shè)公司-創(chuàng)新互聯(lián),建站經(jīng)驗(yàn)豐富以策略為先導(dǎo)10多年以來專注數(shù)字化網(wǎng)站建設(shè),提供企業(yè)網(wǎng)站建設(shè),高端網(wǎng)站設(shè)計(jì),響應(yīng)式網(wǎng)站制作,設(shè)計(jì)師量身打造品牌風(fēng)格,熱線:028-86922220Android-Ble藍(lán)牙開發(fā)Demo示例–掃描,連接,發(fā)送和接收數(shù)據(jù),分包解包(附源碼)
萬物互聯(lián)
的物聯(lián)網(wǎng)時(shí)代的已經(jīng)來臨,ble藍(lán)牙開發(fā)在其中扮演著舉重若輕的角色。最近剛好閑一點(diǎn),抽時(shí)間梳理下這塊的知識(shí)點(diǎn)。
涉及ble藍(lán)牙通訊的客戶端(開啟、掃描、連接、發(fā)送和接收數(shù)據(jù)、分包解包)和服務(wù)端(初始化廣播數(shù)據(jù)、開始廣播、配置Services、Server回調(diào)操作)整個(gè)環(huán)節(jié)以及一些常見的問題即踩過的一些坑。
比如
1、在Android不同版本或不同手機(jī)的適配問題,掃描不到藍(lán)拆拍牙設(shè)備
2、如何避免ble藍(lán)牙連接出現(xiàn)133錯(cuò)誤?
3、單次寫的數(shù)據(jù)大小有20字節(jié)限制,如何發(fā)送長(zhǎng)數(shù)據(jù)
藍(lán)牙有傳統(tǒng)(經(jīng)典)藍(lán)牙和低功耗藍(lán)牙BLE(Bluetooth Low Energy)之分,兩者的旅巖羨開發(fā)的API不一樣,本文主講Ble藍(lán)牙開發(fā),傳統(tǒng)藍(lán)牙不展開,有需要的可以自行了解。
相對(duì)傳統(tǒng)藍(lán)牙,BLE低功耗藍(lán)牙,主要特點(diǎn)是快速搜索,快速連接,超低功耗保持連接和數(shù)據(jù)傳輸。
客戶端
服務(wù)端
Android4.3(API Level 18)開始引入BLE的核心功能并提供了相應(yīng)的 API。
應(yīng)用程序
通過這些 API 掃描藍(lán)牙設(shè)備、查詢 services、讀寫設(shè)備的 characteristics(屬性特征)等操作。
BLE藍(lán)牙協(xié)議是GATT協(xié)議, BLE相關(guān)類不多, 全棗搭都位于android.bluetooth包和android.bluetooth.le包的幾個(gè)類:
android.bluetooth.
.BluetoothGattService 包含多個(gè)Characteristic(屬性
特征值
), 含有唯一的UUID作為標(biāo)識(shí)
.BluetoothGattCharacteristic 包含單個(gè)值和多個(gè)Descriptor, 含有唯一的UUID作為標(biāo)識(shí)
.BluetoothGattDescriptor 對(duì)Characteristic進(jìn)行描述, 含有唯一的UUID作為標(biāo)識(shí)
.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
下面詳細(xì)講解下客戶端和服務(wù)端的開發(fā)步驟流程
安卓手機(jī)
涉及藍(lán)牙權(quán)限問題,藍(lán)牙開發(fā)需要在AndroidManifest.xml文件中添加權(quán)限聲明:
在搜索設(shè)備之前需要詢問打開手機(jī)藍(lán)牙:
注意: BLE設(shè)備地址是動(dòng)態(tài)變化(每隔一段時(shí)間都會(huì)變化),而經(jīng)典藍(lán)牙設(shè)備是出廠就固定不變了!
通過掃描BLE設(shè)備,根據(jù)設(shè)備名稱區(qū)分出目標(biāo)設(shè)備targetDevice,下一步實(shí)現(xiàn)與目標(biāo)設(shè)備的連接,在連接設(shè)備之前要停止搜索藍(lán)牙;停止搜索一般需要一定的時(shí)間來完成,更好調(diào)用停止搜索函數(shù)之后加以100ms的延時(shí),保證系統(tǒng)能夠完全停止搜索藍(lán)牙設(shè)備。停止搜索之后啟動(dòng)連接過程;
BLE藍(lán)牙的連接方法相對(duì)簡(jiǎn)單只需調(diào)用connectGatt方法;
參數(shù)說明
與設(shè)備建立連接之后與設(shè)備通信,整個(gè)通信過程都是在BluetoothGattCallback的異步
回調(diào)函數(shù)
中完成;
BluetoothGattCallback中主要回調(diào)函數(shù)如下:
上述幾個(gè)回調(diào)函數(shù)是BLE開發(fā)中不可缺少的;
當(dāng)調(diào)用targetdDevice.connectGatt(context, false, gattCallback)后系統(tǒng)會(huì)主動(dòng)發(fā)起與BLE藍(lán)牙設(shè)備的連接,若成功連接到設(shè)備將回調(diào)onConnectionStateChange方法,其處理過程如下:
判斷newState == BluetoothGatt.STATE_CONNECTED表明此時(shí)已經(jīng)成功連接到設(shè)備;
mBluetoothGatt.discoverServices();
掃描BLE設(shè)備服務(wù)是
安卓系統(tǒng)
中關(guān)于BLE藍(lán)牙開發(fā)的重要一步,一般在設(shè)備連接成功后調(diào)用,掃描到設(shè)備服務(wù)后回調(diào)onServicesDiscovered()函數(shù),函數(shù)原型如下:
BLE藍(lán)牙開發(fā)主要有負(fù)責(zé)通信的BluetoothGattService完成的。當(dāng)且稱為通信服務(wù)。通信服務(wù)通過
硬件工程師
提供的UUID獲取。獲取方式如下:
具體操作方式如下:
開啟監(jiān)聽,即建立與設(shè)備的通信的首發(fā)數(shù)據(jù)通道,BLE開發(fā)中只有當(dāng)客戶端成功開啟監(jiān)聽后才能與服務(wù)端收發(fā)數(shù)據(jù)。開啟監(jiān)聽的方式如下:
BLE單次寫的數(shù)據(jù)量大小是有限制的,
通常是20字節(jié)
,可以嘗試通過requestMTU增大,但不保證能成功。分包寫是一種解決方案,需要定義分包協(xié)議,假設(shè)每個(gè)包大小20字節(jié),分兩種包,
數(shù)據(jù)包
和非數(shù)據(jù)包。對(duì)于數(shù)據(jù)包,頭兩個(gè)字節(jié)表示包的序號(hào),剩下的都填充數(shù)據(jù)。對(duì)于非數(shù)據(jù)包,主要是發(fā)送一些控制信息。
監(jiān)聽成功后通過向 writeCharacteristic寫入數(shù)據(jù)實(shí)現(xiàn)與服務(wù)端的通信。寫入方式如下:
其中:value一般為Hex格式指令,其內(nèi)容由設(shè)備通信的藍(lán)牙
通信協(xié)議
規(guī)定;
若寫入指令成功則回調(diào)BluetoothGattCallback中的onCharacteristicWrite()方法,說明將數(shù)據(jù)已經(jīng)發(fā)送給下位機(jī);
若發(fā)送的數(shù)據(jù)符合通信協(xié)議,則服務(wù)端會(huì)向客戶端回復(fù)相應(yīng)的數(shù)據(jù)。發(fā)送的數(shù)據(jù)通過回調(diào)onCharacteristicChanged()方法獲取,其處理方式如下:
通過向服務(wù)端發(fā)送指令獲取服務(wù)端的回復(fù)數(shù)據(jù),即可完成與設(shè)備的通信過程;
當(dāng)與設(shè)備完成通信之后之后一定要斷開與設(shè)備的連接。調(diào)用以下方法斷開與設(shè)備的連接:
源碼上傳在CSDN上了,有需要的可以借鑒。
=====> Android藍(lán)牙Ble通訊Demo示例源碼–掃描,連接,發(fā)送和接收數(shù)據(jù),分包解包
BLE單次寫的數(shù)據(jù)量大小是有限制的,通常是20字節(jié),可以嘗試通過requestMTU增大,但不保證能成功。分包寫是一種解決方案,需要定義分包協(xié)議,假設(shè)每個(gè)包大小20字節(jié),分兩種包,數(shù)據(jù)包和非數(shù)據(jù)包。對(duì)于數(shù)據(jù)包,頭兩個(gè)字節(jié)表示包的序號(hào),剩下的都填充數(shù)據(jù)。對(duì)于非數(shù)據(jù)包,主要是發(fā)送一些控制信息。
總體流程如下:
1、定義
通訊協(xié)議
,如下(這里只是個(gè)舉例,可以根據(jù)項(xiàng)目需求擴(kuò)展)
2、封裝通用發(fā)送數(shù)據(jù)接口(拆包)
該接口根據(jù)會(huì)發(fā)送數(shù)據(jù)內(nèi)容按更大字節(jié)數(shù)拆分(一般20字節(jié))放入隊(duì)列,拆分完后,依次從隊(duì)列里取出發(fā)送
3、封裝通用接收數(shù)據(jù)接口(組包)
該接口根據(jù)從接收的數(shù)據(jù)按協(xié)議里的定義解析數(shù)據(jù)長(zhǎng)度判讀是否完整包,不是的話把每條消息累加起來
4、解析完整的數(shù)據(jù)包,進(jìn)行業(yè)務(wù)邏輯處理
5、協(xié)議還可以引入加密解密,需要注意的選算法參數(shù)的時(shí)候,加密后的長(zhǎng)度更好跟原數(shù)據(jù)長(zhǎng)度一致,這樣不會(huì)影響拆包組包
一般都是Android版本適配以及不同ROM機(jī)型(小米/紅米、華為/榮耀等)(EMUI、MIUI、ColorOS等)的權(quán)限問題
藍(lán)牙開發(fā)中有很多問題,要靜下心分析問題,肯定可以解決的,一起加油;
關(guān)于android 藍(lán)牙 數(shù)據(jù)庫的介紹到此就結(jié)束了,不知道你從中找到你需要的信息了嗎 ?如果你還想了解更多這方面的信息,記得收藏關(guān)注本站。
成都創(chuàng)新互聯(lián)科技公司主營:網(wǎng)站設(shè)計(jì)、網(wǎng)站建設(shè)、小程序制作、成都軟件開發(fā)、網(wǎng)頁設(shè)計(jì)、微信開發(fā)、成都小程序開發(fā)、網(wǎng)站制作、網(wǎng)站開發(fā)等業(yè)務(wù),是專業(yè)的成都做小程序公司、成都網(wǎng)站建設(shè)公司、成都做網(wǎng)站的公司。創(chuàng)新互聯(lián)公司集小程序制作創(chuàng)意,網(wǎng)站制作策劃,畫冊(cè)、網(wǎng)頁、VI設(shè)計(jì),網(wǎng)站、軟件、微信、小程序開發(fā)于一體。
本文題目:Android藍(lán)牙數(shù)據(jù)庫:優(yōu)化數(shù)據(jù)傳輸?shù)年P(guān)鍵。(android藍(lán)牙數(shù)據(jù)庫)
標(biāo)題來源:http://fisionsoft.com.cn/article/dhogjpo.html


咨詢
建站咨詢
