我需要检查一下蓝牙是否打开了。
我使用以下代码:
func startDetectingBluetoothState() {
if self.centralManager == nil {
self.centralManager = CBCentralManager(delegate: self, queue: self.workingQueue, options: [CBCentralManagerOptionShowPowerAlertKey: false])
}
}
func centralManagerDidUpdateState(_ central: CBCentralManager) {
let state = central.state
DispatchQueue.main.async { [weak self] in
// notify observers about state change
self?.stateObservers.invokeDelegates { stateObserver in
stateObserver.bluetoothStateChanged()
}
}
}
我在iPhone X 11.3
上启动了应用程序(设置中打开了蓝牙),然后它几乎立即进入centralManagerDidUpdateState(_ central: CBCentralManager)
和state == .poweredOff
。因此,这个值是错误的。然后我在设置中关闭蓝牙,没有调用centralManagerDidUpdateState(_ central: CBCentralManager)
函数(因为它检测到的前一个状态是.PoweredOff),然后我打开蓝牙,使用.poweredOn
值调用centralManagerDidUpdateState(_ central: CBCentralManager)
。然后,它会正确地检测到每个状态变化。但如果我重新启动应用程序,并且蓝牙处于打开状态,它将无法再次检测到它。如果在启动过程中蓝牙关闭,则一切正常。
我有另一台设备iPhone 6+``11.2.5
,一切都像魔咒一样工作:)
3条答案
按热度按时间sy5wg1nm1#
需要实现CBCentralManagerDelegate。以下是可能帮助您检查情况的示例代码-
llew8vvj2#
使用此代码为您工作
juud5qan3#
这个代码起作用了。SWIFT 5版