iT邦幫忙

2023 iThome 鐵人賽

DAY 24
0

CBCentralManagerDelegate的實現

extension BluetoothServices: CBPeripheralDelegate {
    
    /// 發現服務
    func peripheral(_ peripheral: CBPeripheral, didDiscoverServices error: Error?) {
        if let services = peripheral.services {
            for service in services {
                print(service)
                peripheral.discoverCharacteristics(nil, for: service)
            }
        }
    }
    
    /// 服務更改
    func peripheral(_ peripheral: CBPeripheral, didModifyServices invalidatedServices: [CBService]) {
    }
    
    /// 發現對應服務的特徵
    func peripheral(_ peripheral: CBPeripheral, didDiscoverCharacteristicsFor service: CBService, error: Error?) {
        if let characteristics = service.characteristics {
            for characteristic in characteristics {
                print(characteristic)
                if characteristic.uuid.isEqual(CBUUID(string: "FFE1")) {
                    peripheral.readValue(for: characteristic)
                    peripheral.setNotifyValue(true, for: characteristic)
                    rxtxCharacteristic = characteristic
                }
            }
        }
    }
    
    /// 特徵值變更
    func peripheral(_ peripheral: CBPeripheral,
                    didUpdateValueFor characteristic: CBCharacteristic,
                    error: Error?) {
        guard characteristic == rxtxCharacteristic,
              let characteristicValue = characteristic.value,
              let ASCIIstring = String(data: characteristicValue,
                                       encoding: String.Encoding.utf8) else {
            return
        }
        var characteristicASCIIValue = Character(ASCIIstring)
        
        delegate?.getBlEPeripheralValue(value: characteristicASCIIValue.asciiValue!)
    }
}

CBCentralManagerDelegate介紹
CBCentralManagerDelegate協議定義了處理中央(Central)藍牙角色事件的方法。BluetoothServices類別實現了這些方法來監控藍牙的狀態和設備的發現。

以下是一些CBCentralManagerDelegate協議方法的介紹:

  1. centralManagerDidUpdateState(_:)方法:這個方法用於監聽CBCentralManager的狀態變化。根據 CBCentralManager的狀態,可以執行不同的操作,例如啟動藍牙設備的掃描。

  2. centralManager(_:didDiscover:advertisementData:rssi:)方法:當中央設備發現一個周邊藍牙設備 時,這個方法被調用。它提供了設備的信息,包括名稱、廣告數據和信號強度(RSSI)。BluetoothServices類 別使用這個方法來記錄和報告發現的藍牙設備。

在CBCentralManagerDelegate的實現中,我們還可以處理其他事件,如藍牙設備的連接、服務的發現等。這些方法允許我們有效地管理中央藍牙角色的操作。在下一篇文章中,我們將繼續探討CBPeripheralDelegate協議的實現,該協議用於處理周邊藍牙角色的事件。


上一篇
Day23 BlueTooth 1
下一篇
Day 25 BlueTooth 3
系列文
swift 新手路程30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言