我正在使用外部附件框架。 应用程序进入后台,然后返回到前台后,我在重新建立EASession 时遇到问题。如果我终止我的应用程序并重新启动,则可以像预期的那样重新建立蓝牙连接。我怀疑拆解的某些部分丢失了,或者没有暴露(??)。

[EAAccessoryManager sharedAccessoryManager]已连接附件]返回了我连接的附件,我可以查询它以获得名称,型号,编号等。但是,以下几行将_session设置为nil。

_session = [[EASession alloc] initWithAccessory:_accessory forProtocol:_protocolString];

有什么方法可以诊断EASession初始化失败的原因?

有清除旧版EASession的口头禅吗?

这个问题与this一个有关-但我并不是要就走哪条路寻求建议。我想问为什么这条路有这么大的陷阱,以及如何绕过它。

最佳答案

我发现(在iOS4.1之后的世界中)离开应用程序(背景或退出)会导致DidDisconnectNotification触发。如果只是按下电源按钮或让设备进入休眠状态;我们看不到连接断开。

现在,如果BT设备超出范围或自己进入休眠状态。然后,连接断开。

结果,除了ConnectionNotifications,我们不再依赖任何东西。我们什至不信任[[EAAccessoryManager sharedAccessoryManager] connectedAccessories]列表,因为我们发现它有时可能包含“幽灵配件”,它们会说它们已连接并具有可以连接到的流,甚至在整个蓝牙系统消失后也可以写入可用的事件。向下(关闭BT图标)

当您在后台时,ConnectionNotifications会被缓存,因此当您重新进入该应用程序时,您应该获得一个全新的状态。

当然是第一次入场;您要确保已正确设置所有监听器(等)。

10-08 07:26