EASession,EAAccessoryDe​​legate和"ERROR - 开放会话失败"

wes*_*der 7 iphone bluetooth iphone-accessory

我正在使用External Accessory框架.我 app进入后台然后返回前台时遇到重新建立EASession的问题.如果我终止我的应用程序并重新启动,则会重新建立蓝牙连接,正如人们所期望的那样.我怀疑有一部分我正在丢失的拆解 - 或者没有暴露(??).

[EAAccessoryManager sharedAccessoryManager] connectedAccessories]]正在返回我连接的附件,我可以查询它以获取name,modelNumber等.但是,以下行将_session设置为nil.

_session = [[EASession alloc] initWithAccessory:_accessory forProtocol:_protocolString];
Run Code Online (Sandbox Code Playgroud)

有没有办法诊断EASession初始化失败的原因?

清除旧的EASession有一些口头禅吗?

这个问题关系到一个-但我没有要求上遵循的路径建议.我在问为什么这条路有这么大的陷阱以及如何绕过它.

Dru*_*man 6

我发现(在iOS4.1后的世界中)离开应用程序(后台或退出)会导致DidDisconnectNotification触发.在只是按下电源按钮或让设备睡眠的情况下; 我们没有看到连接断开.

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

因此,除了ConnectionNotifications之外,我们不再依赖任何东西.我们甚至不相信这个[[EAAccessoryManager sharedAccessoryManager] connectedAccessories]列表,因为我们发现它有时可以包含"鬼配件",它们会说它们已连接并且有可以连接到的流,并且即使在整个蓝牙系统出现故障后也可以从中获取可写事件(BT图标关闭)

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

当然是第一次进入; 你想确保你已正确设置所有听众(等).