重启蓝牙后重新连接时应用程序未发现服务

Posted

技术标签:

【中文标题】重启蓝牙后重新连接时应用程序未发现服务【英文标题】:App don't discover services when reconnecting after power cycling bluetooth 【发布时间】:2013-07-31 09:21:19 【问题描述】:

当我在连接到CoreBluetooth 外围设备时切换蓝牙时,我会在centralManagerDidUpdateState 回调中断开并删除对我的外围设备的所有引用。

再次扫描将找到并重新连接到设备并再次发出discoverServices,但这次回调didDiscoverServices 从未发生过。通过删除所有设置(常规 -> 重置 -> 重置所有设置)或重新启动它再次工作。正常断开/重新连接也可以。如何解决此问题或以编程方式删除 ios 存储的所有缓存和 UUID?

【问题讨论】:

【参考方案1】:

当您收到 CentralManager 状态已更改为 CBCentralManagerStatePoweredOff 的回调时,您需要遍历所有外围设备并在它们上调用 cancelConnection:。然后你就可以走了。

[_yourCentralManager cancelPeripheralConnection:yourPeripheral];

【讨论】:

不幸的是它没有用。它仍然没有得到didDiscoverServices 回调 事实上,你得到这个是你尝试在 .poweredOff: [CoreBluetooth] API MISUSE 上取消外围连接: 只能在开机状态下接受这个命令跨度> 【参考方案2】:

如果中心状态是CBManagerStatePoweredOn,则像这样调用cancelPeripheralConnection API:

[self.centralManager cancelPeripheralConnection:self.peripheral];

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

【讨论】:

以上是关于重启蓝牙后重新连接时应用程序未发现服务的主要内容,如果未能解决你的问题,请参考以下文章

蓝牙服务器重启后 BLE 配对出现问题

电脑重启后蓝牙不能自动连接,每次都要手动连接

CoreBluetooth 在重新连接时未发现服务

熊晨沣蓝牙实战--小程序蓝牙连接2.0

服务器断电重启了,打开之后发现Oracle 数据库连接不上了,提示以下错误,哪位高人指点一下!!

笔记本电脑重启蓝牙服务被禁用(开启服务后,只要电脑重启蓝牙就被禁用)?