這邊的程式是寫在擴充裡面喔,這邊就是回傳藍芽中央管理器的狀態,而且是遵照CBCentralManagerDelegate協議
extension BluetoothServices: CBCentralManagerDelegate {
func centralManagerDidUpdateState(_ central: CBCentralManager) {
switch central.state {
case .unknown:
print("unknown")
case .resetting:
print("resetting")
case .unsupported:
print("unsupported")
case .unauthorized:
print("unauthorized")
case .poweredOff:
print("poweredOff")
case .poweredOn:
print("poweredOn")
@unknown default:
print("藍芽裝置未知狀態")
}
startScan()
}
這邊比較特別的就是其實狀態處理完後,我們就可以開始掃描藍芽裝置了,再來我們看底下的程式碼
// 發現裝置
func centralManager(_ central: CBCentralManager, didDiscover peripheral: CBPeripheral, advertisementData: [String : Any], rssi RSSI: NSNumber) {
for newPeripheral in bluePeripherals {
if peripheral.name == newPeripheral.name {
return
}
}
if let name = peripheral.name {
bluePeripherals.append(peripheral)
print(name)
}
delegate?.getBLEPeripherals(peripherals: bluePeripherals)
}
peripheral:發現的藍牙裝置
使用 for 循環檢查已發現的裝置(存儲在 bluePeripherals 陣列中),如果發現已存在相同名稱的裝置,則直接返回,避免重複添加。
如果有檢查到新的裝置,就添加到bluePeripherals的陣列裡面
再來就是通過delegate 調用 getBLEPeripherals(peripherals:) 方法,將已發現的裝置列表傳遞出去,這樣可以搭配更新 UI 或進行其他操作。
// 連結裝置
func centralManager(_ central: CBCentralManager, didConnect peripheral: CBPeripheral) {
peripheral.delegate = self
peripheral.discoverServices(nil)
}
今天跟大家分享了回傳藍芽裝置的狀態,並把發現的藍芽裝置寫進陣列裡面,設置代理,可以把發現的裝置傳出去,並搭配其他功能使用,還有連接藍芽裝置,並調用discoverServices發現裝置的服務