過濾方式
先簡(jiǎn)單通過名字過濾(aaaa、bbbb)血久,再通過advertisementData取出mac地址(前提是設(shè)備商先將mac地址按照規(guī)則傳進(jìn)去)
CBCentralManager
CBCentralManager:掃描Peripheral -> 發(fā)現(xiàn)Peripheral(外設(shè)) -> 連接Peripheral
CBPeripheral
CBPeripheral:發(fā)現(xiàn)Service(服務(wù)UUID) --> 發(fā)現(xiàn)Character(讀/寫特征UUID) --> 讀寫數(shù)據(jù)回調(diào) --> 寫入成功突照,要再等待返回的數(shù)據(jù)判斷
重連機(jī)制
重連機(jī)制:①retrievePeripheralsWithIdentifiers -> ②retrieveConnectedPeripheralsWithServices -> ③scanForPeripheralsWithServices
注意:傳入?yún)?shù)時(shí),優(yōu)先傳入值氧吐,次要方案?jìng)魅雗il
特別通用方法 scanForPeripheralsWithServices
讹蘑,將發(fā)現(xiàn)服務(wù)時(shí)的服務(wù)UUID保存,留作下次掃描時(shí)(或者retrieveConnectedPeripheralsWithServices
)讀取使用
而 retrievePeripheralsWithIdentifiers
筑舅,則保存發(fā)現(xiàn)Peripheral
時(shí)的Identifier
注意無(wú)線電的使用和功耗
低功耗藍(lán)牙通信會(huì)共享設(shè)備的無(wú)線電以通過空中傳輸信號(hào)座慰,由于其他形式的無(wú)線通信可能需要使用設(shè)備的無(wú)線電(例如 Wi-Fi、經(jīng)典藍(lán)牙豁翎,甚至其他使用低功耗藍(lán)牙的應(yīng)用程序)角骤,因此開發(fā)您的應(yīng)用程序以最大程度地減少無(wú)線電的使用量。
在為 iOS 設(shè)備開發(fā)應(yīng)用程序時(shí)心剥,盡量減少無(wú)線電的使用尤其重要邦尊,因?yàn)闊o(wú)線電的使用會(huì)對(duì) iOS 設(shè)備的電池壽命產(chǎn)生不利影響
僅在需要時(shí)掃描設(shè)備
除非您需要發(fā)現(xiàn)更多設(shè)備,否則請(qǐng)?jiān)谡业揭B接的設(shè)備后停止掃描其他設(shè)備优烧,通過CBCentralManager.stopScan
停止掃描
僅在必要時(shí)指定 CBCentralManagerScanOptionAllowDuplicatesKey 選項(xiàng)
當(dāng)使用 scanForPeripheralsWithServices:options:
方法掃描設(shè)備時(shí)蝉揍,該方法的默認(rèn)行為是將廣告外圍設(shè)備的多個(gè)發(fā)現(xiàn)合并為單個(gè)發(fā)現(xiàn)事件
如果要更改默認(rèn)行為,可以指定CBCentralManagerScanOptionAllowDuplicatesKey=true
畦娄,即每次中央設(shè)備從外圍設(shè)備接收到廣告數(shù)據(jù)包時(shí)都會(huì)生成一個(gè)發(fā)現(xiàn)事件
設(shè)置 CBCentralManagerScanOptionAllowDuplicatesKey
對(duì)某些情況很有幫助又沾,例如外設(shè)的接近度(RSSI值)啟動(dòng)與外設(shè)的連接
明智地探索外設(shè)的數(shù)據(jù)
以下方法,優(yōu)先傳入特定的UUID值熙卡。應(yīng)該僅尋找和發(fā)現(xiàn)您的應(yīng)用程序所需的相關(guān)特征
discoverServices:
discoverCharacteristics:forService:
訂閱經(jīng)常變化的特征值
有兩種方法檢索特征的值
- 每次需要值時(shí)調(diào)用
readValueForCharacteristic:
方法來(lái)顯式輪詢特征值 - 調(diào)用一次
setNotifyValue:forCharacteristic:
方法來(lái)訂閱特征值杖刷,以便在值發(fā)生變化時(shí)接收外設(shè)的通知。
當(dāng)您擁有所需的所有數(shù)據(jù)時(shí)驳癌,斷開與設(shè)備的連接
當(dāng)不再需要連接時(shí)滑燃,通過斷開與外圍設(shè)備的連接來(lái)幫助減少應(yīng)用程序的無(wú)線電使用量。滿足以下兩種情況颓鲜,請(qǐng)斷開與外圍設(shè)備的連接
- 訂閱的特征值已經(jīng)停止發(fā)送通知
- 外圍設(shè)備獲得了所有數(shù)據(jù)
參考
https://cloud.tencent.com/developer/article/2374918
https://developer.baidu.com/article/details/2834421
https://developer.apple.com/library/archive/documentation/NetworkingInternetWeb/Conceptual/CoreBluetooth_concepts/AboutCoreBluetooth/Introduction.html
https://developer.apple.com/library/archive/documentation/NetworkingInternetWeb/Conceptual/CoreBluetooth_concepts/BestPracticesForInteractingWithARemotePeripheralDevice/BestPracticesForInteractingWithARemotePeripheralDevice.html