iOS 问题检查蓝牙是否打开

标签 ios swift bluetooth core-bluetooth cbcentralmanager

我需要检查蓝牙是否打开。

我使用这段代码:

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/

相关文章:

ios - 互联网重新连接 swift

ios - 丹尼尔金迪/图表 : possible to rotate label of ChartLimitLine by 90 degrees?

java - 蓝牙 SDP 在某些设备中失败

ios - 如何在每个另一个 UILabel 位置下设置几个 UILabel 位置?

ios - 如何将 URL 文件 'Smooth streaming' 转换为 Apple HLs 格式?

objective-c - 有没有办法在 Scenekit 上制作移动/变化的阴影(如初升的太阳)?

c++ - 使用 WASAPI 捕获蓝牙音频数据

ios - 如何获得配对的蓝牙设备

ios - 根据所选的 UITableViewCell 行执行 segue

ios - 如何在自动布局中使两个 View 之间的距离可变