我需要检查蓝牙是否打开。
我使用这段代码:
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)
和 状态 == .poweredOff
。所以这个值是错误的。然后我在设置中关闭蓝牙,centralManagerDidUpdateState(_ central: CBCentralManager)
函数没有被调用(因为它检测到的先前状态是.poweredOff),然后我打开蓝牙和centralManagerDidUpdateState(_ central: CBCentralManager)
使用 .poweredOn
值调用。然后它会正确检测每个状态变化。但是如果我重新启动应用程序并且蓝牙已打开,它就无法再次检测到它。如果在启动过程中蓝牙处于关闭状态,则一切正常。
我有另一台设备 iPhone 6+
11.2.5
,一切都很好:)
最佳答案
您需要实现 CBCentralManagerDelegate。下面是示例代码,可以帮助您检查条件 -
var centralManager:CBCentralManager!
in init() or viewDidLoad()
{
centralManager = CBCentralManager()
centralManager.delegate = self
}
func centralManagerDidUpdateState(_ central: CBCentralManager) {
if central.state == .poweredOn {
print("Bluetooth is connected")
}
else if central.state == .poweredOff{
print("Bluetooth is not Connected.")
}
}
关于iOS 问题检查蓝牙是否打开,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49815870/