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