Swiftui - 蓝牙低功耗状态始终未知
Swiftui - Bluetooth Low Energy status is always unknown
我有一个使用 BLE 的 swiftui 程序。但是当我想知道 centralManager (my iPhone) 的状态时,它显示未知。我不知道是我的代码有错误还是我的 phone.
有问题
我的内容视图:
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()
}
}
我的 class 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 !!
}
我有一个使用 BLE 的 swiftui 程序。但是当我想知道 centralManager (my iPhone) 的状态时,它显示未知。我不知道是我的代码有错误还是我的 phone.
有问题我的内容视图:
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()
}
}
我的 class 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 !!
}