CoreBluetooth:从应用程序断开外围设备连接

时间:2015-05-13 10:57:06

标签: ios objective-c iphone core-bluetooth

我的应用程序与外围设备的蓝牙通信有关。从发现到连接,每个功能都正常工作。虽然从应用程序断开外围设备,我已经编写了这样的代码

<beans/>

当我点击按钮时,上面的方法是调用和app显示外围设备断开连接,当我从应用程序中出来并查看设置/蓝牙/ .Peripheral正在显示已连接。如何停止连接设备级别的外围设备即在设置中。请帮我解决问题。

3 个答案:

答案 0 :(得分:6)

您无法保证系统级别与外围设备断开连接。

这是直接来自CBCentralManager文档的链接:

  

cancelPeripheralConnection:

     

<强>讨论

     

此方法是非阻塞的,以及任何CBPeripheral类   仍未决定的外围命令可能会或可能不会完成。   因为其他应用程序可能仍然连接到外围设备,   取消本地连接并不能保证底层连接   物理链接立即断开连接。从应用程序的角度来看,   但是,外围设备被认为是断开的,并且是中心的   manager对象调用centralManager:didDisconnectPeripheral:错误:   委托对象的方法。

根据我的经验,如果您是使用外围设备的唯一应用程序,物理链接会很快断开连接,但如果您可能不像Apple明确指出的那样,其他应用程序可能会维持一个持久连接,从而导致物理连接链接到不断开,即使它说明了它。

答案 1 :(得分:1)

我知道这是一个老话题,但我想我会在这里为其他人添加一个潜在的解决方案。

您可以执行的操作是发出命令,使外围设备重新启动,重置蓝牙连接。如果您的设备具有可以通过蓝牙发出的命令,那么您很幸运,否则,您需要访问外围设备的固件才能添加执行此操作的新命令。我不是固件人,所以我无法告诉你究竟需要做什么;我所知道的是我正在使用的设备有这样一个命令(它是专门用于我们设备的专有命令,不是蓝牙协议的一部分)并且只要我之前发出它就可以保证断开连接致电cancelPeripheralConnection

答案 2 :(得分:1)

我们遇到了同样的问题,但我们设法通过使用

来解决这个讨厌的错误(或API设计缺陷)

目标C

[peripheral writeValue:x forCharacteristic:y type:CBCharacteristicWriteWithResponse];

<强>夫特

peripheral.writeValue(x, for: y, type: .withResponse)

奇怪的是,iOS不会取消与我们在外设中实现的外围设备的物理连接以执行断开连接,因此我们发送一个字符串指示应该发生断开连接。 我们用过

目标C

[peripheral writeValue:x forCharacteristic:y type:CBCharacteristicWriteWithoutResponse];

<强>夫特

peripheral.writeValue(x, for: y, type: .withResponse)

并且外围设备按预期断开连接。 希望通过这个CoreBluetooth API漏洞帮助任何面临同样问题的人。

x 是外围设备支持的特定cmd(即固件)

y 是您要发送值的具体特征