Android藍(lán)牙4.0之玩爆智能穿戴跑芳、家具(一)

科技評論

目前智能時(shí)代已經(jīng)到來,智能穿戴直颅,智能家居博个,一切都是智能的了,很幸運(yùn)功偿,我做的也是智能行業(yè)盆佣,所以發(fā)表點(diǎn)觀點(diǎn)也是可以的,以我見到的械荷,所謂智能穿戴共耍,智能家居,無非都是用手機(jī)中的軟件作為媒介吨瞎,把手機(jī)和智能設(shè)備聯(lián)系到了一起痹兜,那么聯(lián)系到一起的方式就是我們很熟悉的藍(lán)牙了,或者是無線網(wǎng)颤诀,但是大多數(shù)都使用的是藍(lán)牙字旭,包括很出色的Garmin智能手表,手環(huán)崖叫,也是通過藍(lán)牙4.0讓手機(jī)軟件和手表硬件進(jìn)行通信的遗淳,所以我們能夠掌握藍(lán)牙的技能顯得格外重要,也并不是說他就是未來心傀,誰也說不準(zhǔn)屈暗,下一個(gè)替代者將會出現(xiàn),但是目前好像還沒有發(fā)現(xiàn)剧包,在智能行業(yè)里恐锦,這就是必需品,但是據(jù)我估計(jì)疆液,在未來5年內(nèi),不會有變動陕贮,藍(lán)牙也在繼續(xù)完善堕油,傳輸效率更高了,總之優(yōu)點(diǎn)還是很多的肮之。智能讓生活變得很神奇掉缺,雖然我身處在這個(gè)行業(yè)里,但是我也會感到很是神奇戈擒,列位眶明,擦亮眼睛,讓我們一起來完爆它吧

效果演示

掃盲

  1. 藍(lán)牙有傳統(tǒng)藍(lán)牙(3.0以下)和低功耗藍(lán)牙(ble筐高,又稱藍(lán)牙4.0)之分

  2. android手機(jī)必須系統(tǒng)版本4.3及以上才支持BLE API搜囱。低功耗藍(lán)牙較傳統(tǒng)藍(lán)牙丑瞧, 傳輸速度更快,覆蓋范圍更廣蜀肘,安全性更高绊汹,延遲更短,耗電極低等等優(yōu)點(diǎn)扮宠,這也是為什么近年來智能穿戴的東西越來越多西乖,越來越火

  3. 傳統(tǒng)藍(lán)牙與低功耗藍(lán)牙通信方式也有所不同,傳統(tǒng)的一般通過socket方式坛增,而低功耗藍(lán)牙是通過Gatt協(xié)議來實(shí)現(xiàn)

  4. 低功耗藍(lán)牙也叫BLE

藍(lán)牙的組成

一获雕、 請先看一張圖


二、解釋:

  1. BLE分為Service收捣、Characteristic届案、Descriptor三部分,每個(gè)部分都擁有不同的 UUID來標(biāo)識

  2. 一個(gè)BLE設(shè)備可以擁有多個(gè)Service坏晦,一個(gè)Service可以包含多個(gè)Characteristic萝玷, 一個(gè)Characteristic包含一個(gè)Value和多個(gè)Descriptor,一個(gè)Descriptor包含一個(gè)Value

  3. 通信數(shù)據(jù)一般存儲在Characteristic內(nèi)昆婿,目前一個(gè)Characteristic中存儲的數(shù)據(jù)最大為20 byte

  4. 與Characteristic相關(guān)的權(quán)限字段主要有READ球碉、WRITE、WRITE_NO_RESPONSE仓蛆、NOTIFY睁冬。 Characteristic具有的權(quán)限屬性可以有一個(gè)或者多個(gè)

介紹完了我們就開始看如何開發(fā)藍(lán)牙4.0和開發(fā)流程

開發(fā)步驟

1. 檢查該設(shè)備是否支持BLE設(shè)備
谷歌在Android4.3才開始支持BLE設(shè)備


2. 拿到藍(lán)牙管理器
一個(gè)Android系統(tǒng)只有一個(gè)BluetoothAdapter

3. 打開藍(lán)牙


4. 掃描附近藍(lán)牙設(shè)備
注意:掃描藍(lán)牙是耗較好資源的,所以掃描一段時(shí)間后應(yīng)該及時(shí)關(guān)閉掃描

5. 實(shí)現(xiàn)掃描結(jié)果的回調(diào)

在第4步的時(shí)候在開始掃描的bluetoothAdapter.startLeScan(mLeScanCallback)中的mLeScanCallback看疙,就是我們要實(shí)現(xiàn)的回調(diào)BluetoothAdapter.LeScanCallback豆拨,掃描的所有結(jié)果都會出現(xiàn)在回調(diào)里


6. 連接藍(lán)牙設(shè)備

連接時(shí)應(yīng)關(guān)閉掃描,連接是通過獲取到設(shè)備的mac地址進(jìn)行連接的


7. 實(shí)現(xiàn)連接成功或者失敗狀態(tài)的回調(diào)

點(diǎn)擊要連接的設(shè)備之后能庆,系統(tǒng)都會調(diào)用BluetoothGattCallback回調(diào)施禾,在這里我定義的是mBluetoothGattCallback,然后在實(shí)現(xiàn)回調(diào)里的onConnectionStateChange方法搁胆,一旦設(shè)備的連接狀態(tài)發(fā)生變化弥搞,系統(tǒng)會自動調(diào)用此方法


8. 連接成功后發(fā)現(xiàn)設(shè)備的所有服務(wù)

連接成功后緊接著就得去發(fā)現(xiàn)連接設(shè)備中的所有服務(wù)Service,為什么要發(fā)現(xiàn)服務(wù)渠旁?看下前面的第一張圖你就明白了攀例,繼續(xù)實(shí)現(xiàn)BluetoothGattCallback中的onServicesDiscovered方法,因?yàn)橐坏┰O(shè)備連接成功之后顾腊,系統(tǒng)會自動調(diào)用此方法


9. 向藍(lán)牙設(shè)備發(fā)送數(shù)據(jù)

連接成功之后粤铭,我們總不能什么都不做吧,要做的就是和設(shè)備通信啊杂靶,也就是向設(shè)備發(fā)送數(shù)據(jù)嘍梆惯,一般數(shù)據(jù)都會寫在藍(lán)牙設(shè)備的某個(gè)服務(wù)中的一個(gè)特征characteristic中酱鸭,然后發(fā)送出去,當(dāng)然這還得具體看廠家的藍(lán)牙協(xié)議


一般硬件里讀出寫入的數(shù)據(jù)為二進(jìn)制類型加袋,所以要熟悉整型凛辣,字符串,二進(jìn)制职烧,十六進(jìn)制等它們之間的轉(zhuǎn)換扁誓,這些我會在藍(lán)牙進(jìn)階里再展開,還有如何不停的寫數(shù)據(jù)和讀取數(shù)據(jù)蚀之,一并會在藍(lán)牙進(jìn)階中給出最佳方案
10. 發(fā)送數(shù)據(jù)后的回調(diào)

藍(lán)牙采用的是一應(yīng)一答的模式蝗敢,就是說,你給他發(fā)送了一個(gè)數(shù)據(jù)足删,不管你是發(fā)送失敗還是成功雏逾,藍(lán)牙都會給你應(yīng)答一下允悦,我們暫且這樣理解上荡,我們肯定也是希望我們自己能夠監(jiān)視自己到底有沒有把數(shù)據(jù)發(fā)送出去扎酷,那么此時(shí)就應(yīng)該重寫BluetoothGattCallback中的onCharacteristicWrite方法


要注意的:
需要注意的是,藍(lán)牙采用的是一應(yīng)一答模式拂到,也就是說痪署,只要你對他做了操作之后,那么藍(lán)牙設(shè)備都會響應(yīng)你兄旬,就拿寫入數(shù)據(jù)來說狼犯,只有當(dāng)?shù)谝粭l數(shù)據(jù)寫入完畢之后,才能寫入第二條數(shù)據(jù)领铐,換句話說悯森,只有當(dāng)這個(gè)回調(diào)中的onCharacteristicWrite方法執(zhí)行完之后,才能繼續(xù)寫入數(shù)據(jù)绪撵,具體我們?nèi)绾沃浪{(lán)牙什么時(shí)候響應(yīng)和在什么地方響應(yīng)瓢姻,那么此時(shí)BluetoothGattCallback就顯得尤為重要,藍(lán)牙設(shè)備的所有響應(yīng)都會在BluetoothGattCallback回調(diào)音诈,并且執(zhí)行相應(yīng)的方法汹来,下面我們就給出BluetoothGattCallback的解釋和說明

11. BluetoothGattCallback

BluetoothGattCallback一共有9個(gè)方法,那么只有當(dāng)你調(diào)用或者和連接的設(shè)備發(fā)生互動的時(shí)候改艇,他的與之對應(yīng)的方法才會回調(diào),下面就是方法的對應(yīng)

  1. notification對應(yīng)onCharacteristicChanged坟岔;gatt.setCharacteristicNotification(characteristic, true);

  2. readCharacteristic對應(yīng)onCharacteristicRead谒兄;gatt.readCharacteristic(characteristic);

  3. writeCharacteristic對應(yīng)onCharacteristicWrite;gatt.wirteCharacteristic(mCurrentcharacteristic);

  4. 連接藍(lán)牙或者斷開藍(lán)牙 對應(yīng) onConnectionStateChange社付;

  5. readDescriptor對應(yīng)onDescriptorRead承疲;

  6. writeDescriptor對應(yīng)onDescriptorWrite邻耕;gatt.writeDescriptor(descriptor);

  7. readRemoteRssi對應(yīng)onReadRemoteRssi;gatt.readRemoteRssi()

  8. executeReliableWrite對應(yīng)onReliableWriteCompleted燕鸽;

  9. discoverServices對應(yīng)onServicesDiscoveredgatt.discoverServices()

結(jié)尾

  1. 完成了以上的10步兄世,就算對藍(lán)牙什么都不知道,那么你也能做出一個(gè)藍(lán)牙的Demo啊研,其中更詳細(xì)的代碼可以參照Demo中的源碼

  2. 這只是藍(lán)牙的初級階段御滩,但是已經(jīng)很厲害了好么

  3. 當(dāng)然你要是和藍(lán)牙進(jìn)行通信的話,這些東西還不止党远,你還需要掌握更多的知識削解,才能完全的玩轉(zhuǎn)藍(lán)牙4.0

  4. 以后我會把藍(lán)牙的完整解決方案都會展示出來,為大家作為參考

  5. 原文可看到詳細(xì)的源碼

  6. 原文地址:

http://blog.csdn.net/fussenyu/article/details/53054637

遺留的問題

  1. 如何讀取藍(lán)牙給我們返回的數(shù)據(jù)沟娱,在什么地方讀确胀浴?什么時(shí)候讀燃盟啤矫废?

  2. 如何將很多條數(shù)據(jù)同時(shí)發(fā)給藍(lán)牙設(shè)備?

  3. 如何解析藍(lán)牙返回的數(shù)據(jù)砰蠢,在什么地方解析蓖扑?什么時(shí)候解析?

  4. 如何能將藍(lán)牙的部分形成一個(gè)完整的方案娩脾,直接拿來用赵誓,而不是還要我自己去搭建!

  5. 列位柿赊,讓我們一起期待藍(lán)牙4.0的進(jìn)階篇吧

歡迎長按下圖->識別圖中二維碼或者掃一掃關(guān)注我們的公眾號:

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末俩功,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子碰声,更是在濱河造成了極大的恐慌诡蜓,老刑警劉巖,帶你破解...
    沈念sama閱讀 221,635評論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件胰挑,死亡現(xiàn)場離奇詭異蔓罚,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)瞻颂,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,543評論 3 399
  • 文/潘曉璐 我一進(jìn)店門豺谈,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人贡这,你說我怎么就攤上這事茬末。” “怎么了?”我有些...
    開封第一講書人閱讀 168,083評論 0 360
  • 文/不壞的土叔 我叫張陵丽惭,是天一觀的道長击奶。 經(jīng)常有香客問我,道長责掏,這世上最難降的妖魔是什么柜砾? 我笑而不...
    開封第一講書人閱讀 59,640評論 1 296
  • 正文 為了忘掉前任,我火速辦了婚禮换衬,結(jié)果婚禮上痰驱,老公的妹妹穿的比我還像新娘。我一直安慰自己冗疮,他們只是感情好萄唇,可當(dāng)我...
    茶點(diǎn)故事閱讀 68,640評論 6 397
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著术幔,像睡著了一般另萤。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上诅挑,一...
    開封第一講書人閱讀 52,262評論 1 308
  • 那天四敞,我揣著相機(jī)與錄音,去河邊找鬼拔妥。 笑死忿危,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的没龙。 我是一名探鬼主播铺厨,決...
    沈念sama閱讀 40,833評論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼硬纤!你這毒婦竟也來了解滓?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,736評論 0 276
  • 序言:老撾萬榮一對情侶失蹤筝家,失蹤者是張志新(化名)和其女友劉穎洼裤,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體溪王,經(jīng)...
    沈念sama閱讀 46,280評論 1 319
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡腮鞍,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,369評論 3 340
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了莹菱。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片移国。...
    茶點(diǎn)故事閱讀 40,503評論 1 352
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖道伟,靈堂內(nèi)的尸體忽然破棺而出桥狡,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 36,185評論 5 350
  • 正文 年R本政府宣布裹芝,位于F島的核電站,受9級特大地震影響娜汁,放射性物質(zhì)發(fā)生泄漏嫂易。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,870評論 3 333
  • 文/蒙蒙 一掐禁、第九天 我趴在偏房一處隱蔽的房頂上張望怜械。 院中可真熱鬧,春花似錦傅事、人聲如沸缕允。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,340評論 0 24
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽障本。三九已至,卻和暖如春响鹃,著一層夾襖步出監(jiān)牢的瞬間驾霜,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,460評論 1 272
  • 我被黑心中介騙來泰國打工买置, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留粪糙,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 48,909評論 3 376
  • 正文 我出身青樓忿项,卻偏偏與公主長得像蓉冈,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個(gè)殘疾皇子轩触,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,512評論 2 359

推薦閱讀更多精彩內(nèi)容