iphone - EASession、EAAccessoryDe​​legate 和 "ERROR - opening session failed"

标签 iphone bluetooth iphone-accessory

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

[EAAccessoryManager共享AccessoryManager]connectedAccessories]]正在返回我连接的附件,我可以查询它以获取名称、型号等。但是,以下行将_session设置为nil。

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

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

是否有一些清除旧 EASession 的咒语?

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

最佳答案

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

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

因此,除了 ConnectionNotifications 之外,我们不再依赖任何东西。我们甚至不信任 [[EAAccessoryManager sharedAccessoryManager]connectedAccessories] 列表,因为我们发现它有时可能包含“幽灵配件”,这些配件会说它们已连接并且具有您可以连接的流,并且即使在整个蓝牙系统关闭(BT 图标关闭)后也能获取写入可用事件

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

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

关于iphone - EASession、EAAccessoryDe​​legate 和 "ERROR - opening session failed",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4394291/

相关文章:

iPhone配件API

ios - 后台期间的 EAAccessory/EASession 拆卸

iphone - MPMoviePlayerController 释放问题

iOS ble 写入不改变值

macos - 如何知道 Cocoa 中何时连接了 HID USB/蓝牙设备?

Android:普通蓝牙设备可以与 BLE 通信吗?

iphone - External Accessory 读取问题

iphone - 水平重新定位 UIBarButtonItem

iPhone SDK 3.0 - wait_fences : failed to receive reply: 10004003

iphone - 内存警告和崩溃问题