iT邦幫忙

2023 iThome 鐵人賽

DAY 23
0
class BluetoothServices: NSObject {
    
    static let shared = BluetoothServices()
    
    var central: CBCentralManager?
    var peripheral: CBPeripheralManager?
    
    var connectedPeripheral: CBPeripheral?
    var rxtxCharacteristic: CBCharacteristic?
    
    weak var delegate: BluetoothServicesDelegate?
    
    private var blePeripherals: [CBPeripheral] = []
    
    ///  初始化:副線程
    private override init() {
        super.init()
        
        let queue = DispatchQueue.global()
        central = CBCentralManager(delegate: self, queue: queue)
    }
    
    /// 掃描藍芽裝置
    func startScan() {
        central?.scanForPeripherals(withServices: nil, options: nil)
    }
    
    /// 停止掃描
    func stopScan() {
        central?.stopScan()
    }
    
    /// 連接藍牙週邊設備
    /// - Parameters:
    ///   - peripheral: 要連接的藍牙周邊設備
    func connectPeripheral(peripheral: CBPeripheral) {
        self.connectedPeripheral = peripheral
        
        central?.connect(peripheral, options: nil)
    }
    
    /// 中斷與藍芽週邊設備的連接
    /// - Parameters:
    ///   - peripheral: 要中斷連接的藍牙周邊設備
    func disconnectPeripheral(peripheral: CBPeripheral) {
        central?.cancelPeripheralConnection(peripheral)
    }
}

BluetoothServices類別的介紹
BluetoothServices類別是一個用於處理藍牙設備的管理類別。它具有以下主要功能和屬性:

  1. 單例模式:這個類別使用單例模式,確保在應用程序中只有一個實例存在,可以透過shared屬性訪問。

  2. 屬性:
    central:用於管理中央(Central)藍牙角色的CBCentralManager實例。
    peripheral:用於管理周邊(Peripheral)藍牙角色的CBPeripheralManager實例。
    connectedPeripheral:當前已連接的藍牙周邊設備的CBPeripheral實例。
    rxtxCharacteristic:用於讀寫數據的CBCharacteristic實例。
    delegate:一個遵循BluetoothServicesDelegate協議的委託對象,用於處理藍牙事件。

  3. 方法:
    startScan():啟動藍牙設備的掃描。
    stopScan():停止藍牙設備的掃描。
    connectPeripheral(peripheral:):連接指定的藍牙周邊設備。
    disconnectPeripheral(peripheral:):中斷與指定藍牙周邊設備的連接。
    委託方法:實現CBCentralManagerDelegate和CBPeripheralDelegate協議的方法,用於處理藍牙事件。

這個類別的主要目標是管理藍牙設備的連接,發現服務和特徵,並處理數據交換。在下一篇文章中,我們將深入探討CBCentralManagerDelegate協議的實現。


上一篇
Day 22 泛型API 4
下一篇
Day 24 BlueTooth 2
系列文
swift 新手路程30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言