CoreBluetooth在飞行模式切换时不调用didDisconnectPeripheral函数

3
我有一个使用 CoreBluetooth 的应用程序。它在前台启动连接并开始发送/接收数据,并在转到后台时继续执行此操作,因为我已将 bluetooth-central 添加到 app-Info.plist 中的 UIBackgroundModes。如果我切换飞行模式设置,则我的应用程序会断开连接,但是它不会获取 didDisconnectPeripheral 回调。这是为什么呢?我采取的解决方法是在 centralManagerDidUpdateState 中清除对 CBPeriperal 对象的所有引用,以便当再次将应用程序带回前台时可以进行新的扫描和连接。

如果您只关闭蓝牙设置(而不是通过飞行模式),您的didDisconnectPeripheral会被调用吗? - Larme
@Larme,同样的事情发生了。 - chwi
1个回答

1

仍然无法执行回调函数 didDisconnectPeripheral,或者是因为我仍处于后台状态,所以在控制台中看不到它(我的 NSLog)? - chwi
你确定在收到CBCentralManagerStatePoweredOff通知时,已经正确释放了外设吗? - Tommy Devoy
在我取消连接后,我将外围对象设置为 nil。还有其他方法可以确保正确释放吗? - chwi
这对我也不起作用。你不应该去释放外设。如果你这样做并且 didDisconnectPeripharal 被调用,你将不知道哪一个已经断开连接了。 - ospr
文档明确指出:“只有在中央管理器的状态为已开启时,您才应向其发出命令”。这包括 cancelPeripheralConnection: - leftspin
如果您在状态为关闭时尝试断开外围设备,系统会报错。 - fvisticot

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