1.應(yīng)用如何做自動(dòng)重連其實(shí)自動(dòng)重連比想象的要簡(jiǎn)單許多,無(wú)論是Android還是ios端,只需要在設(shè)備斷開(kāi)連接的委托方法中,重新調(diào)用gatt.connet或者是centralManager.connet方法就可以了,無(wú)論當(dāng)時(shí)設(shè)備是否有點(diǎn),是否在周圍,當(dāng)設(shè)備再次開(kāi)會(huì)或者連接到可連接范圍內(nèi),都會(huì)自動(dòng)被連上。 2.連接失敗處理分兩個(gè)平臺(tái)來(lái)說(shuō),iOS端有連接失敗的委托,但幾乎不會(huì)發(fā)生這種情況;而對(duì)于同款設(shè)備,android常常會(huì)出現(xiàn)連接失敗的情況,status !=BluetoothGatt.GATT_SUCCESS,android端開(kāi)發(fā)請(qǐng)不要把連接失敗和斷開(kāi)連接放在一塊處理,因?yàn)閿嚅_(kāi)連接可以直接嘗試重新連接,而連接失敗后嘗試重新連接,需要加一些延時(shí),并且需要gatt.close,清空一下?tīng)顟B(tài),否則會(huì)把gatt阻塞導(dǎo)致手機(jī)不重啟藍(lán)牙就再也無(wú)法連接任何設(shè)備的情況。 3.后臺(tái)運(yùn)行iOS后臺(tái)運(yùn)行,需要設(shè)備中info.Plist權(quán)限,key:Required background modes,value: bluetooth-central(手機(jī)作為central) , bluetooth-peripheral(手機(jī)作為外設(shè)) 4.同時(shí)連接多個(gè)設(shè)備Android很簡(jiǎn)單,創(chuàng)建多個(gè)gattCallback,每個(gè)gattCallback單獨(dú)管理設(shè)備連接后的操作,而iOS也最好不要?jiǎng)?chuàng)建多個(gè)CBCentralManager,多個(gè)CBCentralManager理論上可以用,但是會(huì)存在多個(gè)手機(jī)版本存在不同的行為,還有一些很容易出錯(cuò)的問(wèn)題,這塊內(nèi)容不細(xì)說(shuō)了。使用同一個(gè)CBCentralManager,通過(guò)進(jìn)入委托的peripheral的identifier區(qū)分不同的設(shè)備,進(jìn)行不同的操作和處理。 5.掃描廣播包所有外設(shè),只有在發(fā)出廣播包的情況下,才能被central發(fā)現(xiàn),絕大多數(shù)情況下,外設(shè)被連接后就不會(huì)發(fā)出廣播(也有例外),很多人遇到無(wú)法找到設(shè)備的問(wèn)題,大多屬于這種情況。 6.提高藍(lán)牙連接速度無(wú)論是iOS,還是Android,都可以通過(guò)已綁定的設(shè)備,在不開(kāi)啟掃描的情況下進(jìn)行快速連接,iOS需要的參數(shù)是peripheral的identifier,Android需要mac地址。但Android和iOS還是有一些區(qū)別的,比如iOS不能拿到已綁定的設(shè)備list,但是可以通過(guò)UUID去拿到peripheral的實(shí)例。而Android可以拿到已綁定的設(shè)備list。Android綁定過(guò)程需要手動(dòng)調(diào)用createBond的方法,而iOS在連接成功一次后會(huì)自動(dòng)綁定。Android在處理createBond時(shí),常常會(huì)因?yàn)椴煌謾C(jī)平臺(tái),不同設(shè)備,會(huì)產(chǎn)生兼容性的問(wèn)題,這點(diǎn)需要注意。 7.定向掃描在掃描時(shí)候可以傳入serviceUUID,這樣可以掃描到特定條件的設(shè)備,提高掃描的速度,排除干擾。 8.如何獲取mac地址Android可以直接通過(guò)getAddress得到mac地址;而iOS出于蘋果的安全策略問(wèn)題,無(wú)法直接獲得mac地址,只能得到一個(gè)mac地址換算出來(lái)的identifier。不過(guò)在智能設(shè)備開(kāi)發(fā)時(shí),一般都會(huì)考慮到這個(gè)問(wèn)題,大多數(shù)智能設(shè)備會(huì)把mac地址保存在廣播數(shù)據(jù)中,不同設(shè)備可能會(huì)存在不同的位置。 9.Babybluetooth藍(lán)牙庫(kù)的使用Babybluetooth是iOS的藍(lán)牙庫(kù)的封裝,iOS藍(lán)牙委托層級(jí)特別討厭,一個(gè)委托接著一個(gè)委托,比如先進(jìn)入掃描的委托,在進(jìn)入鏈接的委托,在進(jìn)入連接成功,發(fā)現(xiàn)服務(wù),發(fā)現(xiàn)特征,讀寫操作,一套操作被拆分的很散,容易出錯(cuò),代碼不易維護(hù),上手慢等缺點(diǎn),Babybluetooth對(duì)CoreBluetooth進(jìn)行了封裝,把委托回調(diào)進(jìn)行方法調(diào)用的方式,改成了鏈?zhǔn)椒椒樞蛘{(diào)用,直接調(diào)用baby.enjoy()方法,完成一整套操作,簡(jiǎn)化了上手難度和代碼維護(hù)成本。 |
|
來(lái)自: 昵稱39099109 > 《藍(lán)牙文章》