我在iOS 8.3中看到一个奇怪的错误,我想知道是否有其他人看到了同样的事情。
我的iPad Air(中央模式)和iPhone 6(外围模式)非常接近。
CBCentralManager
已使用序列后台队列和CBCentralManagerOptionRestoreIdentifierKey
选项CBCentralManagerScanOptionAllowDuplicatesKey: true
选项centralManager:didDiscoverPeripheral:
内,我检查已发现的外围设备列表:let connect: () -> () = { peripheral.delegate = self self.devices[peripheral.identifier.UUIDString] = peripheral self.manager.connectPeripheral(peripheral, options: nil) } if let device = devices[peripheral.identifier.UUIDString] { if device.peripheral.state == .Disconnected { connect() } } else if peripheral.state == .Disconnected { connect() }
外围设备现在在大约10秒钟后断开,立即再次发现并重新连接。 10秒后,此程序重复进行。
这是一个错误还是我在这里做错了什么?
我也尝试直接订阅外围设备上的特性,但这似乎没有改变任何东西。
答案 0 :(得分:8)
这是一种预期的行为。蓝牙设计为消耗非常少的能量,因此它会尽快断开连接。此外,至少在iOS 7中,没有必要重新发现外围设备 - 您可以在断开连接后重新连接到已发现的设备。我非常确定iOS 8也是如此。如果您不需要永久连接,建议使用BLE的方法是:
如果您需要永久连接(例如,您需要实时获取有关心率的数据),您应该使用- setNotifyValue:forCharacteristic:订阅特征
启用特征值的通知时, 外围电话称 peripheral:didUpdateNotificationStateForCharacteristic:error:方法 其特权的代理对象通知您的应用程序 价值变化。因为它是选择何时发送的外围设备 更新,您的应用程序应该准备好处理它们,只要 通知或指示仍然有效。
答案 1 :(得分:0)
它帮助我不时向外围设备发送消息(不是命令 - 任何东西)。