# 蓝牙音乐模块流程与开发指南 > 这是入口文档。 > 本次排版已去掉 Mermaid 图,改为“纯文本流程块 + 编号步骤表 + 拆分文档”,适合 Obsidian 直接阅读。 ## 推荐阅读顺序 | 顺序 | 文档 | 先看什么 | |---|---|---| | 1 | [[00_总览_一页看懂]] | 先建立模块整体印象。 | | 2 | [[01_启动初始化流程]] | 看蓝牙音乐 SDK 是怎么启动的。 | | 3 | [[02_A2DP连接与断开流程]] | 看“有没有声音通道”怎么判断。 | | 4 | [[03_AVRCP歌曲信息与播放状态流程]] | 看歌名、歌手、播放状态从哪里来。 | | 5 | [[04_播放控制与音频焦点流程]] | 看播放、暂停、切歌、焦点抢占。 | | 6 | [[05_Launcher卡片流程]] | 看桌面卡片怎么显示和控制蓝牙音乐。 | | 7 | [[06_开发入口_风险点_测试清单]] | 开发前定位文件、风险点和测试项。 | ## 最短主链路 ### 用户点击播放 ```text 用户 ↓ BluetoothMusicActivity.onClick() ↓ BtMusicViewModel.playBtMusic() ↓ BtMusicControlManager.playBtMusic() ↓ BtMusicManager.requestFocus() ↓ BtMusicAudioManager.requestAudioFocus() ↓ BtMusicManager.playBtMusic() ↓ BluetoothAvrcpClient.play() ↓ MediaControllerCompat.TransportControls.play() ↓ 手机音乐 App 开始播放 ``` ### 手机切歌后刷新页面 ```text 手机音乐 App 切歌 ↓ Android 蓝牙栈 AVRCP 元数据变化 ↓ MediaBrowserClient.onMetadataChanged() ↓ BluetoothAvrcpClient.onMetadataChanged() ↓ BtMusicManager 解析歌曲信息 ↓ BtMusicViewModel.mLiveDataMusicInfo ↓ BluetoothMusicActivity 更新歌名/歌手/封面/时长 ↓ BtInfoPushManager.sendMusicInfoToLauncher() ↓ Launcher 蓝牙音乐卡片更新 ``` ## 当前代码根路径 ```text F:\zdCode\tongli ``` ## 蓝牙音乐最核心文件 | 文件 | 作用 | |---|---| | `YX_BlueTooth\src\main\java\com\yaxon\bluetooth\main\BluetoothMusicActivity.java` | 蓝牙音乐页面。 | | `YX_BlueTooth\src\main\java\com\yaxon\bluetooth\viewmodel\BtMusicViewModel.java` | 页面状态和控制转发。 | | `YX_BluetoothSDK\src\main\java\com\yaxon\bluetoothsdk\manager\BtMusicControlManager.java` | 对外音乐控制入口。 | | `YX_BluetoothSDK\src\main\java\com\yaxon\bluetoothsdk\modules\BtMusicManager.java` | 蓝牙音乐核心业务。 | | `YX_BluetoothSDK\src\main\java\com\yaxon\bluetoothsdk\platform\BluetoothA2dpSinkClient.java` | A2DP 音频连接。 | | `YX_BluetoothSDK\src\main\java\com\yaxon\bluetoothsdk\platform\BluetoothAvrcpClient.java` | AVRCP 控制和歌曲信息。 | | `YX_BluetoothSDK\src\main\java\com\yaxon\bluetoothsdk\audio\BtMusicAudioManager.java` | 音频焦点和媒体按键。 | | `YX_Launcher\src\main\java\com\yaxon\launcher\card\BluetoothMusicCardView.java` | Launcher 蓝牙音乐卡片。 |