我正在使用外部附件框架。 应用程序进入后台,然后返回到前台后,我在重新建立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会被缓存,因此当您重新进入该应用程序时,您应该获得一个全新的状态。
当然是第一次入场;您要确保已正确设置所有监听器(等)。