android4.0低功耗Ble詳解

首先我們要知道Ble是在android4.3被引入的

Ble開(kāi)發(fā)分為倆個(gè)設(shè)備

1.中心設(shè)備:中心設(shè)備就是我們的手機(jī)肺然,用來(lái)掃描和連接周邊設(shè)備舌厨。功能相對(duì)強(qiáng)大缀踪。

2.周邊設(shè)備:被中心設(shè)備連接以提供數(shù)據(jù)的,例如手環(huán)腾务、智能體溫計(jì)等,功能相對(duì)簡(jiǎn)單削饵,功耗較小岩瘦。

它應(yīng)該是在對(duì)建立連接的過(guò)程不同角色的一種區(qū)分未巫。我們知道藍(lán)牙設(shè)備要想讓別人知道自己的存在,是要不間斷的對(duì)外發(fā)送廣播的启昧,而另外一方則需要掃描并回復(fù)該廣播包叙凡,這樣才能建立連接,在這個(gè)過(guò)程中密末,負(fù)責(zé)廣播的就是peripheral握爷,而負(fù)責(zé)掃描的是Central。不過(guò)這些我們了解即可严里。

GATT協(xié)議:

? ? Ble是基于GATT進(jìn)行通信的新啼。GATT是一種屬性傳輸協(xié)議

一、權(quán)限配置:

? ??// 檢查手機(jī)是否支持BLE刹碾,不支持則退出

if (!getPackageManager().hasSystemFeature(PackageManager.FEATURE_BLUETOOTH_LE)) {

Toast.makeText(this,"您的設(shè)備不支持藍(lán)牙BLE燥撞,將關(guān)閉", Toast.LENGTH_SHORT).show();

finish();

}

if (mBluetoothAdapter ==null || !mBluetoothAdapter.isEnabled()) {

Intent enableBtIntent =new Intent(BluetoothAdapter.ACTION_REQUEST_ENABLE);

startActivityForResult(enableBtIntent,1);

}



二、獲取藍(lán)牙適配器:

? ? 1.通過(guò)getSystem(Context.BLUETOOTH_SERVICE)獲取到藍(lán)牙管理器迷帜。BluetoothManager物舒。

? ? 2.通過(guò)BluetoothManager.getAdapter();獲取到藍(lán)牙適配器。BluetoothAdapter戏锹。



三冠胯、掃描附近藍(lán)牙:

BluetoothAdapter.startLeScan(LeScanCallback);開(kāi)始掃描。

BluetoothAdapter.stopLeScan(LeScanCallback);停止掃描锦针。

? ?作為一個(gè)嚴(yán)謹(jǐn)?shù)馁Y深程序猿來(lái)講我們掃描前先通過(guò) BluetoothAdapter.stopLeScan(LeScanCallback);去停止掃描荠察。然后再調(diào)用startLeScan(LeScanCallback);開(kāi)始掃描。



mBlueList:存放每個(gè)設(shè)備的Bean對(duì)象的集合伞插。將我們掃描到的設(shè)備展示在ListView上割粮。



四、鏈接到指定設(shè)備以及建立數(shù)據(jù)傳輸通道:

? ? 當(dāng)我們點(diǎn)擊當(dāng)前Item后通過(guò)當(dāng)前Item的藍(lán)牙地址獲取到當(dāng)前的藍(lán)牙設(shè)備也就是BluetoothDevice對(duì)象媚污。這個(gè)對(duì)象也是我們記性藍(lán)牙連接的主題要對(duì)象舀瓢。

????通過(guò)BluetoothDevice.connectGatt(Context context,boolean autoConnect,BluetoothGattCallback callback);連接到指定藍(lán)牙,具體每個(gè)參數(shù)的意義下圖有介紹耗美。


注意:這里我們需要將未關(guān)閉的藍(lán)牙掃描進(jìn)行關(guān)閉京髓。

BluetoothGatt對(duì)象藍(lán)牙連接協(xié)議的總體類,通過(guò)這個(gè)類進(jìn)行的鏈接商架。???

?這里主要介紹BluetoothGattCallback 接口 他是連接成功后的回調(diào)堰怨,如果連接不成功是不會(huì)回調(diào)的。

在回調(diào)中主要有這么幾個(gè)方法:

? ?1. onConnectionStateChange();

在介紹第一個(gè)方法前先說(shuō)一下藍(lán)牙連接狀態(tài)碼

?????連接狀態(tài)的狀態(tài)碼分為四種

? ?/** 配置文件處于斷開(kāi)狀態(tài)蛇摸。 */

? ? public static final int STATE_DISCONNECTED? = 0;

? ? /** 配置文件處于連接-中-狀態(tài)备图。*/

? ?public static final int STATE_CONNECTING? ? = 1;

? ? /**? 配置文件處于連接狀態(tài)。 */

? public static final int STATE_CONNECTED? ? = 2;

? /** 配置處于斷開(kāi)狀態(tài)。 */

? ?public static final int STATE_DISCONNECTING = 3;

判斷狀態(tài)碼當(dāng)連接成功后我們調(diào)用BluetoothGatt.discoverServices()進(jìn)行服務(wù)上的鏈接揽涮。在服務(wù)鏈接成功后會(huì)回調(diào)給onServicesDiscovered()也是接口回調(diào)的第二方法抠藕。。蒋困。盾似。注意:在連接成功后不能立即去建立服務(wù)上的連接我們需要給我們藍(lán)牙一個(gè)緩沖時(shí)間,所以這里我開(kāi)啟了延遲雪标。



? ? 2.onServicesDiscovered()方法

/** 連接協(xié)議操作順利完成 */

public static final int GATT_SUCCESS =0;


判斷服務(wù)連接的狀態(tài)碼零院,服務(wù)建立成功后進(jìn)行數(shù)據(jù)通道的建立

? ??下面就是建立數(shù)據(jù)傳輸?shù)耐ǖ酪彩潜夭豢缮俚牟襟E

UUID全部是由我們自己生成,也可以在網(wǎng)上找村刨。告抄。。UUID他就是用來(lái)標(biāo)識(shí)我們所需要進(jìn)行的是那種服務(wù)烹困。一種UUID代表著一種服務(wù)玄妈。其實(shí)仔細(xì)看我們發(fā)現(xiàn)我們自己寫(xiě)了一個(gè)類似于Socket的三次握手的這么一個(gè)過(guò)程。

? ? 3.onCharacteristicRead():

當(dāng)藍(lán)牙返回給我們數(shù)據(jù)的時(shí)候所觸發(fā)的回調(diào)髓梅,藍(lán)牙是以16進(jìn)制的byte[]數(shù)組進(jìn)行的數(shù)據(jù)傳輸拟蜻。我們將藍(lán)牙返回給我們的數(shù)據(jù)用相對(duì)應(yīng)的工具類進(jìn)行解析,解析我們能看懂的字符串枯饿。------ByteStringHexUtil.bytesToHexString(txValue)自己寫(xiě)的工具類將16進(jìn)制的byte[]轉(zhuǎn)換成字符串

????以上就是就BluetoothGattCallback 接口的三個(gè)主要方法酝锅。



? ? 連接建立了,服務(wù)也有了奢方,傳輸通過(guò)也有了搔扁,下面就給大家介紹怎么給藍(lán)牙發(fā)送數(shù)據(jù)。

? ? 藍(lán)牙一般接收的都是16進(jìn)制的byte[]數(shù)組蟋字。說(shuō)白了就是將我們對(duì)應(yīng)的字符串指令轉(zhuǎn)換成對(duì)應(yīng)的16進(jìn)制的byte[]數(shù)組稿蹲。藍(lán)牙內(nèi)部會(huì)將我們這個(gè)byte[]數(shù)組進(jìn)行解析識(shí)別我們所發(fā)送的指令進(jìn)行相對(duì)應(yīng)的操作。(至于字符串怎么轉(zhuǎn)成16進(jìn)制的byte[]數(shù)組鹊奖,下一篇文章我會(huì)介紹)

writeCharacteristic 方法的作用就是將給定的特性及其值寫(xiě)入相關(guān)聯(lián)的遠(yuǎn)程設(shè)備

這就是給藍(lán)牙發(fā)送指令的代碼苛聘。核心代碼就是:mBluetoothGatt.writeCharacteristic(RxChar);將我們的byte[]設(shè)置給了BluetoothGattCharacteristic藍(lán)牙特性對(duì)象。又將BluetoothGattCharacteristic對(duì)象通過(guò)writeCharacteristic()最終發(fā)送給了藍(lán)牙忠聚。??
writeCharacteristic()方法的源碼设哗。他通過(guò)getValue獲取到了我們所SetValue的數(shù)據(jù)
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市两蟀,隨后出現(xiàn)的幾起案子网梢,更是在濱河造成了極大的恐慌,老刑警劉巖赂毯,帶你破解...
    沈念sama閱讀 218,858評(píng)論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件战虏,死亡現(xiàn)場(chǎng)離奇詭異拣宰,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī)活烙,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,372評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門(mén)徐裸,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人啸盏,你說(shuō)我怎么就攤上這事∑锼睿” “怎么了回懦?”我有些...
    開(kāi)封第一講書(shū)人閱讀 165,282評(píng)論 0 356
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)次企。 經(jīng)常有香客問(wèn)我怯晕,道長(zhǎng),這世上最難降的妖魔是什么缸棵? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 58,842評(píng)論 1 295
  • 正文 為了忘掉前任舟茶,我火速辦了婚禮,結(jié)果婚禮上堵第,老公的妹妹穿的比我還像新娘吧凉。我一直安慰自己,他們只是感情好踏志,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,857評(píng)論 6 392
  • 文/花漫 我一把揭開(kāi)白布阀捅。 她就那樣靜靜地躺著,像睡著了一般针余。 火紅的嫁衣襯著肌膚如雪饲鄙。 梳的紋絲不亂的頭發(fā)上,一...
    開(kāi)封第一講書(shū)人閱讀 51,679評(píng)論 1 305
  • 那天圆雁,我揣著相機(jī)與錄音忍级,去河邊找鬼。 笑死伪朽,一個(gè)胖子當(dāng)著我的面吹牛轴咱,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播驱负,決...
    沈念sama閱讀 40,406評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼嗦玖,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了跃脊?” 一聲冷哼從身側(cè)響起宇挫,我...
    開(kāi)封第一講書(shū)人閱讀 39,311評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎酪术,沒(méi)想到半個(gè)月后器瘪,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體翠储,經(jīng)...
    沈念sama閱讀 45,767評(píng)論 1 315
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,945評(píng)論 3 336
  • 正文 我和宋清朗相戀三年橡疼,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了援所。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 40,090評(píng)論 1 350
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡欣除,死狀恐怖住拭,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情历帚,我是刑警寧澤滔岳,帶...
    沈念sama閱讀 35,785評(píng)論 5 346
  • 正文 年R本政府宣布,位于F島的核電站挽牢,受9級(jí)特大地震影響谱煤,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜禽拔,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,420評(píng)論 3 331
  • 文/蒙蒙 一刘离、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧睹栖,春花似錦硫惕、人聲如沸。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 31,988評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至梁只,卻和暖如春缚柳,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背搪锣。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 33,101評(píng)論 1 271
  • 我被黑心中介騙來(lái)泰國(guó)打工秋忙, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人构舟。 一個(gè)月前我還...
    沈念sama閱讀 48,298評(píng)論 3 372
  • 正文 我出身青樓灰追,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親狗超。 傳聞我的和親對(duì)象是個(gè)殘疾皇子弹澎,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,033評(píng)論 2 355

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

  • 1. Java基礎(chǔ)部分 基礎(chǔ)部分的順序:基本語(yǔ)法,類相關(guān)的語(yǔ)法努咐,內(nèi)部類的語(yǔ)法苦蒿,繼承相關(guān)的語(yǔ)法,異常的語(yǔ)法渗稍,線程的語(yǔ)...
    子非魚(yú)_t_閱讀 31,639評(píng)論 18 399
  • 最近項(xiàng)目使用藍(lán)牙,之前并沒(méi)有接觸,還是發(fā)現(xiàn)了很多坑鸳碧,查閱了很多資料,說(shuō)的迷迷糊糊灸姊,今天特查看官方文檔。 說(shuō)下遇到的...
    King9527閱讀 1,794評(píng)論 0 1
  • 相關(guān)概念 BRBasic Rate秉溉,早期的傳統(tǒng)藍(lán)牙技術(shù) V1.1力惯, V1.2 版本,傳輸速率為748~810kb/...
    七零八落問(wèn)號(hào)閱讀 9,422評(píng)論 2 26
  • BLE 與經(jīng)典藍(lán)牙的區(qū)別 BLE 的 Kotlin 下實(shí)踐 BluetoothGattCallback 不回調(diào)異常...
    chauI閱讀 10,907評(píng)論 1 7
  • [別樣生活召嘶,萬(wàn)卷書(shū)萬(wàn)里路]2018年2月12日夯膀,連續(xù)1000天閱讀日志第279篇。 自從成為書(shū)癡苍蔬,我便常常獨(dú)處:有...
    顏玉讀書(shū)閱讀 971評(píng)論 8 27