Apple EA / Classic Bluetooth

经典蓝牙已配对,为什么 EASession 仍然打不开?

将蓝牙配对成功直接等同于 EA 可用,是外设项目中的常见误判。需要把 Pairing、SDP、RFCOMM、iAP2、Authentication、EA Protocol 与 EASession 分层确认。

Apple EAClassic BluetoothRFCOMMEASessioniAP2

“已配对”只证明最底层关系建立

Classic Bluetooth Pairing 成功,不代表 RFCOMM、iAP2、MFi Authentication 或 EA Protocol Session 已建立。iOS App 能否通过 EASession 打开流,取决于整条链路全部完成。

分阶段检查

  1. Pairing:设备地址、配对信息和重连状态是否正常。
  2. SDP / RFCOMM:服务记录、通道与连接是否建立并保持。
  3. iAP2:Identification 和 Authentication 是否完成。
  4. EA Protocol:Protocol String 是否与 iOS App 声明一致。
  5. EASession:InputStream / OutputStream 是否成功调度并进入 open 状态。

常见根因

Protocol String 不一致

外设报告的字符串与 App 支持列表不一致,配对正常但 App 不会打开对应 Session。

双传输冲突

USB 和 Bluetooth 同时存在时,没有明确互斥、优先级和状态清理。

RFCOMM 连接假在线

底层连接保留,但数据通道已失效,重连没有重新初始化完整协议状态。

App 生命周期

前后台切换、附件通知和 Stream 调度处理不完整。

验证建议

分别执行首次配对、已配对重连、App 前后台、蓝牙开关、USB 插拔与蓝牙切换、手机重启、外设休眠唤醒,确保每个阶段都能清理并重新建立。