51 · 广播与事件清单
基于 settingslib
BluetoothEventManager三 flavor 注册广播 + 本仓BluetoothCallback+ 自定义广播。 关联:21-settingslib §2/§6、50-术语
1. BluetoothEventManager 注册广播(系统→settingslib 总线)
三 flavor 数量:dcddif 18 / xcddif 29 / f3dif 20。下表 ✓=有,✗=无。f3dif 新增
ACTION_AUTO_ON_STATE_CHANGED(A17独有)。
| Action | Handler | 分发目标 | dcddif | xcddif | f3dif |
|---|---|---|---|---|---|
ACTION_STATE_CHANGED | AdapterStateChangedHandler | onBluetoothStateChanged + MIUI半关 | ✓ | ✓(半关:180) | ✓(无半关) |
ACTION_CONNECTION_STATE_CHANGED | ConnectionStateChangedHandler | onConnectionStateChanged | ✓ | ✓ | ✓ |
ACTION_DISCOVERY_STARTED/FINISHED | ScanningStateChangedHandler | onScanningStateChanged | ✓ | ✓ | ✓ |
ACTION_FOUND | DeviceFoundHandler | addDevice+dispatchDeviceAdded | ✓ | ✓ | ✓ |
ACTION_NAME_CHANGED/ALIAS_CHANGED | NameChangedHandler | onDeviceNameUpdated | ✓ | ✓ | ✓ |
ACTION_BOND_STATE_CHANGED | BondStateChangedHandler | onDeviceBondStateChanged+cachedDevice.onBondingStateChanged | ✓ | ✓ | ✓ |
ACTION_CLASS_CHANGED | ClassChangedHandler | refreshBluetoothClass | ✓ | ✓ | ✓ |
ACTION_UUID | UuidChangedHandler | cachedDevice.onUuidChanged()(触发自动连接旁路) | ✓ | ✓ | ✓ |
ACTION_BATTERY_LEVEL_CHANGED | BatteryLevelChangedHandler | refresh | ✓ | ✓ | ✓ |
ACTION_ACL_CONNECTED/DISCONNECTED | AclStateChangedHandler | onAclConnectionStateChanged | ✓ | ✓ | ✓ |
ACTION_ACTIVE_DEVICE_CHANGED(A2dp/Headset/HearingAid/LeAudio) | ActiveDeviceChangedHandler | onActiveDeviceChanged | 部分 | ✓ | 部分 |
ACTION_AUDIO_STATE_CHANGED/PHONE_STATE_CHANGED | AudioModeChangedHandler | onAudioModeChanged | ✓ | ✓ | ✓ |
ACTION_CSIS_DEVICE_AVAILABLE | CsipGroupFoundHandler | CSIS组发现 | ✗ | ✓ | ✗ |
ACTION_HF_TWSP_BATTERY_STATE_CHANGED | TwspBatteryLevelChangedHandler | MIUI TWSP电量 | ✗ | ✓ | ✗ |
ACTION_CODEC_CONFIG_CHANGED | A2dpCodecConfigChangedHandler | onA2dpCodecConfigChanged | ✗ | ✓ | ✗ |
BROADCAST_SOURCE_INFO(反射) | BroadcastSourceInfoHandler | Auracast广播源 | ✗ | ✓ | ✗ |
BROADCAST_STATE_CHANGED/ENCRYPTION_KEY_GENERATED | Broadcast*Handler | Auracast | ✗ | ✓ | ✗ |
Vcp.ACTION_CONNECTION_MODE_CHANGED/VOLUME_CHANGED | Vcp*Handler | VCP音量 | ✗ | ✓ | ✗ |
ACTION_SCREEN_OFF/ON | ScreenChangedHandler | MIUI半关特性 | ✗ | ✓(180) | ✗ |
ACTION_AUTO_ON_STATE_CHANGED | — | A17新增(A17自动开启) | ✗ | ✗ | ✓(143) |
注册范围:dcddif :91-127 / xcddif :108-181 / f3dif :103-143。RECEIVER_EXPORTED:xcddif(:231,235)+f3dif(:179,183) 有,dcddif 无。try/catch 广播保护:仅 xcddif(:386-392)。
2. profile 连接状态广播(LocalBluetoothProfileManager → 独立 mProfileBroadcastReceiver)
各 profile 的 ACTION_CONNECTION_STATE_CHANGED 通过 addProfile→addProfileHandler 注册到 mProfileIntentFilter:
| profile 广播 | dcddif | xcddif | f3dif |
|---|---|---|---|
| A2dp / A2dpSink | ✓ | ✓ | ✓ |
| Headset / HeadsetClient(HFP) | ✓ | ✓ | ✓ |
| PbapClient / PbapServer | ✓ | ✓ | ✓ |
| MapClient / Map | ✓ | ✓ | ✓ |
| Hid / HidDevice | ✓ | ✓ | ✓ |
| Pan / Sap / Opp | ✓ | ✓ | ✓ |
| HearingAid | ✓ | ✓ | ✓ |
| HapClient / CsipSetCoordinator / VolumeControl / LeAudio / LeAudioBroadcastAssistant | ✗ | ✓ | ✓ |
| DeviceGroupClient / Vcp / Dun | ✗ | ✓ | ✗(f3dif移除) |
profile 自定义 action(如 HapClient
HAP_CONNECTION_STATE_CHANGED)仅 xcddif+f3dif。
3. 本仓自定义广播 / Intent(App 内部通信)
| Action / Intent | 常量定义 | 发送方 | 接收方 | 用途 |
|---|---|---|---|---|
com.micar.settings.action.CLOSE_BLUETOOTH_SETTINGS_ACTIVITY | BluetoothSettingsActivity.kt:26 | CarPlay/AA 连接后打开自家弹窗 | BluetoothSettingsActivity | 自动关蓝牙列表页 |
com.android.micar.settings.DEVICE_DISCONNECT | MiBluetoothExt.kt(performDisConnect) | performDisConnect | 蓝牙音乐App等 | 通知设备已断开 |
ACTION_CONNECT_NEW_DEVICE(sendConnectNewDeviceBroadcast) | MiBluetoothUtils.kt:369-381 | onPair/connectDevice | 蓝牙音乐App | 暂停播放(新设备连接) |
sendBluetoothConnectedBroadcast | MiBluetoothUtils(DevicePairStageEvent边沿:104) | BluetoothUnbondedDevicesPrefController | 外部 | ”从未连接busy→已连接”边沿通知 |
mis://complex/connect?action=carplay_connect&bt_mac= | ConnectionConstants:2-3 | MiCarplayConnectTypeChooseDialogFragment:140 | com.mi.car.carplay / com.desaysv.carplay | CarPlay deeplink 拉起 |
CarSettingsJump.BluetoothSettings.DEVICE_SETTING_SERVICE | BluetoothDeviceService.kt:15 | ConnectionUtils.updateLastConnectedBtDevice:459 | BluetoothDeviceService(IntentService) | 断开后更新 last device |
4. BluetoothCallback 回调集(UI 接入接口)
三 flavor 方法数:dcddif 10 / xcddif 15 / f3dif 11。 契约深讲(default/IntDef 设计语言、6 个实现者、扩展三步、flavor 成对增删)→ 23;Auracast 广播 QR 协议 → 80 系列。
| 回调 | 触发广播/来源 | UI 用途 | dcddif | xcddif | f3dif |
|---|---|---|---|---|---|
onBluetoothStateChanged(int) | ACTION_STATE_CHANGED | 开关控件、列表显隐 | ✓ | ✓ | ✓ |
onScanningStateChanged(boolean) | DISCOVERY_STARTED/FINISHED | 扫描动画、持续循环 | ✓ | ✓ | ✓ |
onDeviceAdded(CachedBluetoothDevice) | DeviceFoundHandler | 列表插入 | ✓ | ✓ | ✓ |
onDeviceDeleted(CachedBluetoothDevice) | dispatchDeviceRemoved | 列表移除 | ✓ | ✓ | ✓ |
onDeviceBondStateChanged(cachedDevice,int) | BOND_STATE_CHANGED | 配对状态联动 | ✓ | ✓ | ✓ |
onConnectionStateChanged(cachedDevice,int) | CONNECTION_STATE_CHANGED | adapter整体连接态 | ✓ | ✓ | ✓ |
onActiveDeviceChanged(cachedDevice,int) | ACTIVE_DEVICE_CHANGED | 活跃设备标识 | ✓ | ✓ | ✓ |
onAudioModeChanged() | AUDIO/PHONE_STATE_CHANGED | 通话态刷新 | ✓ | ✓ | ✓ |
onProfileConnectionStateChanged(cachedDevice,int,int) | 各profile stateChanged | 连接/断开文案 | ✓ | ✓ | ✓ |
onAclConnectionStateChanged(cachedDevice,int) | ACL_CONNECTED/DISCONNECTED | ACL断开检测(详情页goBack) | ✓ | ✓ | ✓ |
onA2dpCodecConfigChanged(cachedDevice,codecStatus) | CODEC_CONFIG_CHANGED | 编码器显示 | ✗ | ✓ | ✗ |
onNewGroupFound/onGroupDiscoveryStatusChanged | CSIS | LE Audio组管理 | ✗ | ✓ | ✗ |
onBroadcastStateChanged/onBroadcastKeyGenerated | Auracast | 广播音频 | ✗ | ✓ | ✗ |
onAutoOnStateChanged | AUTO_ON_STATE_CHANGED | A17自动开启 | ✗ | ✗ | ✓(174) |
注册时机:BluetoothMainEntrySettingsFragment onStart:216/onStop:223;各 Controller onStartInternal:115/onStopInternal:123。必须配对(CopyOnWriteArrayList,漏注销致泄漏)。所有回调在主线程触发。
5. 速查要点
- 广播数差异是平台能力裁剪(dcddif 无 LE Audio 全家桶)+ 版本演进(f3dif 新增 AUTO_ON、移除部分 Auracast)。
ACTION_UUID是自动连接旁路触发器:到 onUuidChanged→timeout 窗口内 connectDevice,不查黑名单(见 31 H4,仅 dcddif/xcddif)。ACTION_BOND_STATE_CHANGED被 SDP 延迟最多 3s(见 20 §2)——勿当实时信号。- 本仓自定义广播是 App 与音乐 App/CarPlay app 解耦点;CarPlay 用
mis://deeplink(非 connection://)。 - 三 flavor 行号:引用 BluetoothEventManager/BluetoothCallback 必标 flavor(见 21 §8)。