【Bluedroid】蓝牙音频接收端活动设备切换机制深度解析(sink_set_active_device)
本文深入剖析Android蓝牙音频接收端(Sink)活动设备切换的全流程,涵盖设备状态管理、编解码器协商、多线程协作等核心机制。通过分析从应用层指令到底层音频会话建立的完整调用链,揭示蓝牙设备无缝切换的技术原理,重点关注异步操作、状态同步及编解码器配置的关键实现细节。
一、核心功能流程
-
设备切换入口:
sink_set_active_device
作为入口函数,验证模块状态后通过do_in_main_thread
调度核心逻辑到主线程执行。 -
设备类型处理:
set_active_peer_int
根据设备类型 (源 / 接收器) 判断共存模式,调用对应模块的SetActivePeer
方法。 -
活动设备设置:
btif_av_sink.SetActivePeer
处理三种场景:设备地址匹配、断开连接、新设备切换,验证设备状态后调用btif_a2dp_sink_restart_session
。 -
会话管理:
btif_a2dp_sink_restart_session
协调会话终止、活动设备设置和新会话启动,调用底层bta_av_co_set_active_peer
更新系统状态。