蓝牙断电重启后重新连接时,应用程序无法发现服务。

5
当我在连接一个CoreBluetooth外设时,切换蓝牙会导致我在centralManagerDidUpdateState回调中进行断开连接并删除所有对外设的引用。
再次扫描将找到并重新连接到设备,并再次发出discoverServices指令,但这一次回调didDiscoverServices从未发生。通过删除所有设置(通用 -> 重置 -> 重置所有设置)或重新启动它可以再次工作。正常的断开/重新连接也可以工作。如何规避此问题或以编程方式删除iOS存储的所有缓存和UUID?
2个回答

1
当您收到回调通知中央管理器状态已更改为 CBCentralManagerStatePoweredOff 时,您需要循环遍历所有外围设备并在它们上调用cancelConnection:。然后您就可以开始了。
[_yourCentralManager cancelPeripheralConnection:yourPeripheral];

很遗憾,它没有起作用。它仍然无法获得“didDiscoverServices”回调。 - chwi
实际上,如果您尝试在.poweredOff状态下取消外围连接,则会收到以下消息:[CoreBluetooth] API MISUSE:<CBCentralManager: 0x1c447db00>只能在开启状态下接受此命令。 - leftspin

0
如果中央设备的状态是CBManagerStatePoweredOn,就可以像这样调用cancelPeripheralConnection API:
[self.centralManager cancelPeripheralConnection:self.peripheral];

回调方法centralManager:didDisconnectPeripheral:error:会被调用。但是,如果状态不是CBManagerStatePoweredOn,比如CBManagerStatePoweredOff,则此回调将不会执行。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接