我一直在使用连接到蓝牙BLE设备的Swift编写应用程序。出于某种原因,该应用程序并不总是连接到该设备。在这种情况下,它将连接但立即断开连接。这种情况可能只发生在连接的10倍中,但肯定会干扰应用程序的可靠性。
我正在使用CoreBluetooth
连接到BLE设备。再次尝试连接通常会使其重新连接,并且每次与此设备通信的其他应用程序都能正常工作,因此我确信这不是外围设备的问题。
我想知道是否有人遇到过类似的问题,或者是否有特殊原因导致这种情况发生?
编辑:这是我桌子的willSelectRow的代码。这是我获得外设连接的地方。
func tableView(tableView: UITableView, willSelectRowAtIndexPath indexPath: NSIndexPath) -> NSIndexPath? {
centralManager.stopScan()
connectingPeripheral.append(discoveredDeviceArrayInfo[indexPath.row])
connectPeripheralNow(connectingPeripheral[0])
return indexPath
}
这是我连接的地方,此时我选择了设置要连接的设备的CBPeripheral详细信息的行。
connectPeripheralNow如下所示:
func connectPeripheralNow(peripheral: CBPeripheral!){
self.centralManager.connectPeripheral(peripheral, options: nil)
}
didConnectPeripheral和didDiscoverServices看起来像这样
func centralManager(central: CBCentralManager,didConnectPeripheral peripheral: CBPeripheral)
{
peripheral.delegate = self
peripheral.discoverServices([CBUUID(string: "FFE5")])
print("SUCCESS: Connected to " + peripheral.name!)
}
func peripheral(peripheral: CBPeripheral, didDiscoverServices error: NSError?)
{
if let servicePeripherals = peripheral.services as [CBService]!
{
for servicePeripheral in servicePeripherals
{
print("INFORMATION: Service discovered " + String(stringInterpolationSegment: servicePeripheral.UUID))
peripheral.discoverCharacteristics(nil, forService: servicePeripheral)
}
}
}
仅仅是为了获取信息,我确实会出现'SUCCESS:Connected to xxx'消息,表明它正在连接。如果您需要更多代码,请告诉我们!
答案 0 :(得分:0)
您提到的更多是预期的行为。 BTLE旨在消耗非常少量的能量,因此它会尽快断开连接。如果您不需要永久连接,请点击发现 - >连接 - >读/写 - >设置计时器 - >当计时器触发连接时。
如果您需要永久连接,您应该订阅传输实时数据的特征,如心率应用。您需要实现setNotifyValue:forCharacteristic:
方法。请阅读Apple Documentation了解详情。