80 · Auracast 广播 QR 篇 · 总览与链路地图
篇目定位:LE Audio 广播音频(Auracast)“扫码加入/分享广播源”链路中的 QR 码协议段。 源码基线:dev 分支(2026-09-06 核实;红队对抗记录见 _对抗核验记录-80篇.md)。 前置:21-settingslib架构与事件流、§4。
0. 一句话
车机把一个 Auracast 广播源编成一串 QR 码文本(或反向把扫码结果还原成可连接的广播源),全部协议事实锚在三个类上:BluetoothBroadcastUtils(常量/前缀)→ BluetoothLeBroadcastMetadataExt(编解码)→ LocalBluetoothLeBroadcastMetadata(上层出入口)。
1. flavor 能力矩阵(先看这个)
| dcddif (dcd/骁龙8295) | xcddif (A14) | f3dif (A17) | |
|---|---|---|---|
BluetoothBroadcastUtils.java | ✗ 不存在 | ✓ | ✓ |
BluetoothLeBroadcastMetadataExt.kt | ✗ | ✓ | ✓ |
QR 前缀 SCHEME_BT_BROADCAST_METADATA | — | "BT:" (:46) | "BLUETOOTH:UUID:184F;" (:46) |
| EventManager 广播源 handler(BROADCAST_SOURCE_INFO/BROADCAST_STATE 等) | ✗ | ✓(见 51 §1) | ✗(分发已删,见 51 §1) |
| onBroadcastStateChanged/onBroadcastKeyGenerated 回调 | ✗ | ✓ | ✗(接口里也删了) |
三点结论:
- dcd 车型没有 LE Audio 广播类:dcddif
.../settingslib/bluetooth/目录 26 个文件中无任何名字含 Broadcast/LeAudio 的类、无任何 .kt 文件(2026-09-06 逐项核实)。 - xcddif 与 f3dif 的 QR 码互不兼容:前缀不同——A14 平台是 Android 14 AOSP 私有格式(
"BT:"),A17 平台是蓝牙 SIG Auracast 标准格式("BLUETOOTH:UUID:184F;",0x184F = Broadcast Audio Announcement 服务 UUID)。跨平台扫码互不识别是预期行为,不是 bug。 - f3dif 仍保留 Utils/Ext 两个类(Ext 仍被
LocalBluetoothLeBroadcastMetadata.kt引用,SIG 格式编解码能力在),但 EventManager 侧的 Auracast 广播分发与 BluetoothCallback 对应回调已整体移除——A17 上这些事件走别的机制(待后续篇目补)。
2. 链路地图
flowchart LR BBU["BluetoothBroadcastUtils<br/>SCHEME 前缀(唯一被用的常量)"] EXT["BluetoothLeBroadcastMetadataExt.kt<br/>toQrCodeString() 生成<br/>convertToBroadcastMetadata() 解析"] LBM["LocalBluetoothLeBroadcastMetadata.kt<br/>import :19 / 调用 :29"] UI["广播设置 UI / 扫码结果"] UI --> LBM --> EXT --> BBU
引用关系(全仓核实,2026-09-06,排除 build):
BluetoothBroadcastUtils全仓仅被两 flavor 的BluetoothLeBroadcastMetadataExt.kt引用(各自:29static import),且只用 SCHEME 一个常量;其余 4 常量(TAG_FRAGMENT_QR_CODE_SCANNER:24 /ACTION_BLUETOOTH_LE_AUDIO_QR_CODE_SCANNER:29-30 /EXTRA_BLUETOOTH_DEVICE_SINK:35 /EXTRA_BLUETOOTH_SINK_IS_GROUP:41)在 java/kt/xml 全仓零引用——手机端 Settings 的遗物,为与 AOSP 上游同形而保留。BluetoothLeBroadcastMetadataExt.kt仅存在于 xcddif/f3dif,全仓引用它的只有同 flavor 的LocalBluetoothLeBroadcastMetadata.kt(:19import、:29调用 convertToBroadcastMetadata)。
3. 与既有篇目分工
| 问题 | 去 |
|---|---|
| 广播注册/Callback 三 flavor 总表 | 51 §1/§4 |
| 回调契约与接入方法 | 23 |
| QR 字段协议/编解码规则/flavor 差异 | 81(本系列) |
| CachedBluetoothDevice / active 设备闭环 | 60 / 70 系列 |
| LocalBluetoothLeBroadcast 源管理(开广播/加源/广播助手) | 未覆盖,留待 82+ |
4. 关键锚点速查(红队核对版)
| 事实 | 锚点 |
|---|---|
| xcddif SCHEME = “BT:“ | xcddif/.../bluetooth/BluetoothBroadcastUtils.java:46 |
| f3dif SCHEME = “BLUETOOTH:UUID:184F;“ | f3dif/.../bluetooth/BluetoothBroadcastUtils.java:46 |
| 两 flavor 该文件唯一差异 = 第 46 行 | diff 输出仅 46c46 |
| Ext 引用 SCHEME | BluetoothLeBroadcastMetadataExt.kt:29(两 flavor) |
| LocalBluetoothLeBroadcastMetadata 调用 Ext | LocalBluetoothLeBroadcastMetadata.kt:19/:29(两 flavor) |
| dcddif 无 Broadcast/LeAudio 类 | dcddif .../bluetooth/ 目录 26 文件清单(2026-09-06) |
5. 时效声明
- 本系列锚点 2026-09-06 于 dev 分支逐个核对。f3dif 源集已合入 dev(262 文件被跟踪,随 targetSdk 37 适配 b57402a19 等提交),dev 的 f3dif
CachedBluetoothDevice.java与 dev_a17_0610 分支为同一 blob——60 系列 f3dif 行号(2719 行基线)在 dev 可直接复用。 - 行号漂移是常态,引用前先
grep -n复核;一切蓝牙行号必须标注 flavor。