【Bluedroid】btif_av_handle_event 流程源码解析
本文深入解析Android蓝牙A2DP模块中Opened状态的事件处理机制。通过分析
btif_av_handle_event
的事件分发流程和StateOpened::ProcessEvent
的具体实现,揭示蓝牙音频连接在已建立连接但未开始传输音频时的行为逻辑,包括启动流、断开连接、重新配置等关键操作的状态转换过程。
一、概述
1.1 对等端管理
通过BtifAvSource
(源)和BtifAvSink
(宿)管理器实现BtifAvPeer
对象的查找与创建:
-
查找:已知地址时调用
FindPeer
;已知 BTA 句柄时调用FindPeerByHandle
遍历peers_
容器匹配。 -
创建:遍历
kPeerIdMin~kPeerIdMax
分配唯一peer_id
(共存模式需检查源 / 宿 ID 冲突),绑定 BTA 句柄(未知时查表),创建对象并初始化后存入peers_
。
1.2 状态机事件处理
对等端通过BtifAvStateMachine
管理生命周期,核心逻辑为事件驱动的状态转换: