【问题标题】:CBCentralManager always return .poweredOff state on iOS 11.1.xCBCentralManager 在 iOS 11.1.x 上总是返回 .poweredOff 状态
【发布时间】:2018-05-14 01:42:57
【问题描述】:

我正在开发一个 BLE 项目,为此我启动 CBCentralManager,并扫描可用设备。我能够扫描并连接可用的 BLE 外围设备。 一切正常,直到我没有在 iOS 11.0.x 版本上进行测试。
当我在 iOS 11.1.1 或 11.1.2 上测试时,CBCentralManager 在启动应用程序时总是返回给我 powerOff 状态。但是当我打开控制中心,然后关闭并再次打开蓝牙或激活/停用飞行模式(自动关闭/打开蓝牙)。应用程序开始扫描 BLE 外围设备,一切看起来都很好,直到重新启动应用程序。 是否有人在 iOS 11.1.x 上遇到过此类问题并且能够解决此问题,请帮助解决此问题。

下面是我检查状态的代码

func initiateCentralManager(){
      manager = CBCentralManager(delegate: self, queue: nil, options: [CBCentralManagerOptionRestoreIdentifierKey : "MyBLECurrentState"]) 
}

 func centralManagerDidUpdateState(_ central: CBCentralManager){
       print("Received CBCentralManager state")
        peripheralArray.removeAll()
        if central.state == .poweredOn {
            print("poweredOn")
        } else if central.state == .poweredOff {
            print("poweredOff")

        }
    }

【问题讨论】:

  • iOS 11.1.2 中出现了很多与蓝牙相关的问题
  • 是的,我在开发者论坛上也看到了这个帖子和更多内容,但其中大部分都与 11.1 beta 版本有关。所以我在这里和开发者论坛上也发布了我的问题。
  • 与 11.2.6 相同的问题,但并不总是发生。

标签: swift bluetooth core-bluetooth ios11.1.1


【解决方案1】:

这是正在发生的事情

iOS 有 3 个级别的蓝牙状态:

  1. 蓝牙开启并允许新连接
  2. 蓝牙开启和新 不允许连接
  3. 蓝牙关闭

CBCentralManager 将返回 poweredOff 状态 23

处于1 状态(蓝牙开启并允许新连接)

  • 在设置中切换OFF蓝牙
  • 在控制中心切换ON

处于2 状态(蓝牙开启和新 不允许连接)

  • 在设置中切换OFF蓝牙
  • 在控制中心切换ON
  • 在控制中心切换OFF(按钮将变为白色)

2进入状态1

  • 进行 BT 设置并点击“允许新连接”

【讨论】:

  • 如何通过 CentralManager.state 在代码中确定状态是在 case 2 还是 case 3? @antoinem?
  • 你不可能是这个问题...最好的解决方案是建议您的用户从控制中心激活蓝牙
  • 我通过这个进入poweredOff 状态:在控制中心关闭 -> 在设置中关闭蓝牙 -> 在设置中打开蓝牙 -> 重新启动应用程序。蓝牙显示为 ON EVERYWHERE 但在应用程序内部检查状态时显示poweredOff
  • 为了让用户修复它,他应该在控制中心关闭和打开蓝牙。蓝牙状态在控制中心没有正确显示的 iOS 错误似乎。在设备设置中关闭和打开蓝牙仅在应用程序未重新启动之前有效,因此在这种情况下,每次应用程序重新启动时都会再次出现错误。
猜你喜欢
  • 2018-03-14
  • 1970-01-01
  • 1970-01-01
  • 2016-08-17
  • 1970-01-01
  • 1970-01-01
  • 2016-02-07
  • 2015-08-27
  • 2016-04-18
相关资源
最近更新 更多