關(guān)于BLE的重連接的問題

由于項目的用到低功耗藍(lán)牙的模塊羡亩,對這塊內(nèi)容做了一些了解丹禀,其中也借鑒了一些前輩寫的開源項目状勤,這里推薦一個BLE開源框架鞋怀,有時間可以瀏覽下源代碼,還是挺簡單的持搜,使用起來也挺不錯的密似,但是這個庫沒有實現(xiàn)藍(lán)牙重連接這個問題,由于我要用到這個功能葫盼,所以就改了下源碼残腌,讓設(shè)備可以重連接,因此產(chǎn)生了今天的問題

BLE如何實現(xiàn)重連接

連接

要想實現(xiàn)重連接贫导,至少我們需要知道如何去連接一個BLE設(shè)備抛猫,關(guān)鍵就是調(diào)用api了(這就是廢話),關(guān)鍵的連接API是
BluetoothDevice.connectGatt(Context context, boolean autoConnect, BluetoothGattCallback callback)
這個api會返回一個BluetoothGatt 的對象孩灯,調(diào)用這個連接的話闺金,可以看到下方的logcat會輸出如下日志

07-27 17:52:02.629 19106-19106/com.icecold.sleepbandtest D/BluetoothGatt: connect() - device: C6:0F:E8:41:58:8B, auto: false
07-27 17:52:02.629 19106-19106/com.icecold.sleepbandtest D/BluetoothGatt: registerApp()
07-27 17:52:02.629 19106-19106/com.icecold.sleepbandtest D/BluetoothGatt: registerApp() - UUID=2feb8823-4072-4ba0-8695-c43f960ed167
07-27 17:52:02.645 19106-19118/com.icecold.sleepbandtest D/BluetoothGatt: onClientRegistered() - status=0 clientIf=5

等待一段時間就會回調(diào)下方的回調(diào)函數(shù)

07-27 17:52:05.421 19106-19119/com.icecold.sleepbandtest D/BluetoothGatt: onClientConnectionState() - status=0 clientIf=5 device=C6:0F:E8:41:58:8B

這里尤其需要注意的是clientIf=5,這個clientIf的個數(shù)是有限的峰档,如果不斷開clientIf=5败匹,下次再調(diào)用上面的connectGatt()方法就會使得clientIf++變成6,這樣加下去的話面哥,等超出了設(shè)置的上限的話哎壳,就會導(dǎo)致手機無法在連接藍(lán)牙設(shè)備,只能開關(guān)系統(tǒng)藍(lán)牙重置才行尚卫,所以要實現(xiàn)重連接不能讓這個值一直去累加

因此每調(diào)用一次connectGatt()方法就需要調(diào)用一次disconnect()方法以及close()方法真正做清除clientIf這個事情的是close()方法來取消之前的clientIf=5

調(diào)用disconnect()和close()方法會在logcat產(chǎn)生如下的日志

07-27 18:04:18.682 19106-19222/com.icecold.sleepbandtest D/BluetoothGatt: cancelOpen() - device: C6:0F:E8:41:58:8B
07-27 18:04:18.687 19106-19222/com.icecold.sleepbandtest D/BluetoothGatt: close()
07-27 18:04:18.688 19106-19222/com.icecold.sleepbandtest D/BluetoothGatt: unregisterApp() - mClientIf=5

注意這里的disconnect()和close()方法的調(diào)用归榕,都是需要一個BluetoothGatt對象才能調(diào)用的,所以這個時候發(fā)現(xiàn)上面connectGatt()方法返回的BluetoothGatt對象就顯的非常重要了吱涉,需要用這個返回的對象調(diào)用disconnect()和close()方法否則clientIf則會一直在累加刹泄,需要保證這點

onConnectionStateChange(final BluetoothGatt gatt, final int status, final int newState)

通過上面的這個回調(diào)函數(shù)就能實現(xiàn)重連接操作,需要注意上面提到的內(nèi)容就行了

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末怎爵,一起剝皮案震驚了整個濱河市特石,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌鳖链,老刑警劉巖姆蘸,帶你破解...
    沈念sama閱讀 219,039評論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異芙委,居然都是意外死亡逞敷,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,426評論 3 395
  • 文/潘曉璐 我一進店門灌侣,熙熙樓的掌柜王于貴愁眉苦臉地迎上來推捐,“玉大人,你說我怎么就攤上這事侧啼∨F猓” “怎么了堪簿?”我有些...
    開封第一講書人閱讀 165,417評論 0 356
  • 文/不壞的土叔 我叫張陵,是天一觀的道長皮壁。 經(jīng)常有香客問我椭更,道長,這世上最難降的妖魔是什么闪彼? 我笑而不...
    開封第一講書人閱讀 58,868評論 1 295
  • 正文 為了忘掉前任甜孤,我火速辦了婚禮,結(jié)果婚禮上畏腕,老公的妹妹穿的比我還像新娘。我一直安慰自己茉稠,他們只是感情好描馅,可當(dāng)我...
    茶點故事閱讀 67,892評論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著而线,像睡著了一般铭污。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上膀篮,一...
    開封第一講書人閱讀 51,692評論 1 305
  • 那天嘹狞,我揣著相機與錄音,去河邊找鬼誓竿。 笑死磅网,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的筷屡。 我是一名探鬼主播涧偷,決...
    沈念sama閱讀 40,416評論 3 419
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼毙死!你這毒婦竟也來了燎潮?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,326評論 0 276
  • 序言:老撾萬榮一對情侶失蹤扼倘,失蹤者是張志新(化名)和其女友劉穎确封,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體再菊,經(jīng)...
    沈念sama閱讀 45,782評論 1 316
  • 正文 獨居荒郊野嶺守林人離奇死亡爪喘,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,957評論 3 337
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了袄简。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片腥放。...
    茶點故事閱讀 40,102評論 1 350
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖绿语,靈堂內(nèi)的尸體忽然破棺而出秃症,到底是詐尸還是另有隱情候址,我是刑警寧澤,帶...
    沈念sama閱讀 35,790評論 5 346
  • 正文 年R本政府宣布种柑,位于F島的核電站岗仑,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏聚请。R本人自食惡果不足惜荠雕,卻給世界環(huán)境...
    茶點故事閱讀 41,442評論 3 331
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望驶赏。 院中可真熱鬧炸卑,春花似錦、人聲如沸煤傍。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,996評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽蚯姆。三九已至五续,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間龄恋,已是汗流浹背疙驾。 一陣腳步聲響...
    開封第一講書人閱讀 33,113評論 1 272
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留郭毕,地道東北人它碎。 一個月前我還...
    沈念sama閱讀 48,332評論 3 373
  • 正文 我出身青樓,卻偏偏與公主長得像铣卡,于是被迫代替她去往敵國和親链韭。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 45,044評論 2 355

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