Swiftui - 低功耗蓝牙状态始终未知

多米数

我有一个使用 BLE 的 swiftui 程序。但是当我想知道 centralManager (my iPhone) 的状态时,它显示未知。我不知道是我的代码有问题还是我的手机有问题。

我的内容视图:

import SwiftUI
import CoreBluetooth

struct ContentView: View {
    var body: some View {
        VStack {
            Text("View").background(Color.init(red: 56, green: 22, blue: 22))
        }
        .onAppear(perform: connectBLEDevice)
    }
    private func connectBLEDevice(){
        print("connectBLEDevice")
        let ble = BLEConnection()
        ble.startCentralManager()
    }
}

我的 BLE 课程:

import CoreBluetooth

class BLEConnection: NSObject, CBCentralManagerDelegate, CBPeripheralDelegate {
    var centralManager: CBCentralManager!
    var myPeripheral: CBPeripheral!

func startCentralManager() {
    self.centralManager = CBCentralManager(delegate: self, queue: nil)
    print("Central Manager State: \(self.centralManager.state)")
    centralManagerDidUpdateState(self.centralManager)
}

func centralManagerDidUpdateState(_ central: CBCentralManager) {
    switch (central.state) {
       case .unsupported:
        print("BLE is Unsupported")
        break
       case .unauthorized:
        print("BLE is Unauthorized")
        break
       case .unknown:
        print("BLE is Unknown")
        break
       case .resetting:
        print("BLE is Resetting")
        break
       case .poweredOff:
        print("BLE is Powered Off")
        break
       case .poweredOn:
        print("BLE powered on")
        break
    @unknown default:
        break
    }
}
}
他的脾气

这里有一些修复

struct ContentView: View {
    private let ble = BLEConnection() // make member !!

    var body: some View {
        VStack {
            Text("View").background(Color.init(red: 56, green: 22, blue: 22))
        }
        .onAppear(perform: connectBLEDevice)
    }

    private func connectBLEDevice(){
        print("connectBLEDevice")
        ble.startCentralManager()
    }
}

Delegate 会被 BLE 引擎异步调用,所以不要强制调用它——只需为每个状态添加处理代码

func startCentralManager() {
    self.centralManager = CBCentralManager(delegate: self, queue: nil)

//    print("Central Manager State: \(self.centralManager.state)") //
//    centralManagerDidUpdateState(self.centralManager)  // << wrong !!
}

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章