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独有)。

ActionHandler分发目标dcddifxcddiff3dif
ACTION_STATE_CHANGEDAdapterStateChangedHandleronBluetoothStateChanged + MIUI半关✓(半关:180)✓(无半关)
ACTION_CONNECTION_STATE_CHANGEDConnectionStateChangedHandleronConnectionStateChanged
ACTION_DISCOVERY_STARTED/FINISHEDScanningStateChangedHandleronScanningStateChanged
ACTION_FOUNDDeviceFoundHandleraddDevice+dispatchDeviceAdded
ACTION_NAME_CHANGED/ALIAS_CHANGEDNameChangedHandleronDeviceNameUpdated
ACTION_BOND_STATE_CHANGEDBondStateChangedHandleronDeviceBondStateChanged+cachedDevice.onBondingStateChanged
ACTION_CLASS_CHANGEDClassChangedHandlerrefreshBluetoothClass
ACTION_UUIDUuidChangedHandlercachedDevice.onUuidChanged()(触发自动连接旁路)
ACTION_BATTERY_LEVEL_CHANGEDBatteryLevelChangedHandlerrefresh
ACTION_ACL_CONNECTED/DISCONNECTEDAclStateChangedHandleronAclConnectionStateChanged
ACTION_ACTIVE_DEVICE_CHANGED(A2dp/Headset/HearingAid/LeAudio)ActiveDeviceChangedHandleronActiveDeviceChanged部分部分
ACTION_AUDIO_STATE_CHANGED/PHONE_STATE_CHANGEDAudioModeChangedHandleronAudioModeChanged
ACTION_CSIS_DEVICE_AVAILABLECsipGroupFoundHandlerCSIS组发现
ACTION_HF_TWSP_BATTERY_STATE_CHANGEDTwspBatteryLevelChangedHandlerMIUI TWSP电量
ACTION_CODEC_CONFIG_CHANGEDA2dpCodecConfigChangedHandleronA2dpCodecConfigChanged
BROADCAST_SOURCE_INFO(反射)BroadcastSourceInfoHandlerAuracast广播源
BROADCAST_STATE_CHANGED/ENCRYPTION_KEY_GENERATEDBroadcast*HandlerAuracast
Vcp.ACTION_CONNECTION_MODE_CHANGED/VOLUME_CHANGEDVcp*HandlerVCP音量
ACTION_SCREEN_OFF/ONScreenChangedHandlerMIUI半关特性✓(180)
ACTION_AUTO_ON_STATE_CHANGEDA17新增(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 通过 addProfileaddProfileHandler 注册到 mProfileIntentFilter

profile 广播dcddifxcddiff3dif
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_ACTIVITYBluetoothSettingsActivity.kt:26CarPlay/AA 连接后打开自家弹窗BluetoothSettingsActivity自动关蓝牙列表页
com.android.micar.settings.DEVICE_DISCONNECTMiBluetoothExt.kt(performDisConnect)performDisConnect蓝牙音乐App等通知设备已断开
ACTION_CONNECT_NEW_DEVICE(sendConnectNewDeviceBroadcast)MiBluetoothUtils.kt:369-381onPair/connectDevice蓝牙音乐App暂停播放(新设备连接)
sendBluetoothConnectedBroadcastMiBluetoothUtils(DevicePairStageEvent边沿:104)BluetoothUnbondedDevicesPrefController外部”从未连接busy→已连接”边沿通知
mis://complex/connect?action=carplay_connect&bt_mac=ConnectionConstants:2-3MiCarplayConnectTypeChooseDialogFragment:140com.mi.car.carplay / com.desaysv.carplayCarPlay deeplink 拉起
CarSettingsJump.BluetoothSettings.DEVICE_SETTING_SERVICEBluetoothDeviceService.kt:15ConnectionUtils.updateLastConnectedBtDevice:459BluetoothDeviceService(IntentService)断开后更新 last device

4. BluetoothCallback 回调集(UI 接入接口)

三 flavor 方法数:dcddif 10 / xcddif 15 / f3dif 11。 契约深讲(default/IntDef 设计语言、6 个实现者、扩展三步、flavor 成对增删)→ 23;Auracast 广播 QR 协议 → 80 系列

回调触发广播/来源UI 用途dcddifxcddiff3dif
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_CHANGEDadapter整体连接态
onActiveDeviceChanged(cachedDevice,int)ACTIVE_DEVICE_CHANGED活跃设备标识
onAudioModeChanged()AUDIO/PHONE_STATE_CHANGED通话态刷新
onProfileConnectionStateChanged(cachedDevice,int,int)各profile stateChanged连接/断开文案
onAclConnectionStateChanged(cachedDevice,int)ACL_CONNECTED/DISCONNECTEDACL断开检测(详情页goBack)
onA2dpCodecConfigChanged(cachedDevice,codecStatus)CODEC_CONFIG_CHANGED编码器显示
onNewGroupFound/onGroupDiscoveryStatusChangedCSISLE Audio组管理
onBroadcastStateChanged/onBroadcastKeyGeneratedAuracast广播音频
onAutoOnStateChangedAUTO_ON_STATE_CHANGEDA17自动开启✓(174)

注册时机BluetoothMainEntrySettingsFragment onStart:216/onStop:223;各 Controller onStartInternal:115/onStopInternal:123。必须配对(CopyOnWriteArrayList,漏注销致泄漏)。所有回调在主线程触发。

5. 速查要点

  1. 广播数差异是平台能力裁剪(dcddif 无 LE Audio 全家桶)+ 版本演进(f3dif 新增 AUTO_ON、移除部分 Auracast)。
  2. ACTION_UUID 是自动连接旁路触发器:到 onUuidChanged→timeout 窗口内 connectDevice,不查黑名单(见 31 H4,仅 dcddif/xcddif)。
  3. ACTION_BOND_STATE_CHANGED 被 SDP 延迟最多 3s(见 20 §2)——勿当实时信号。
  4. 本仓自定义广播是 App 与音乐 App/CarPlay app 解耦点;CarPlay 用 mis:// deeplink(非 connection://)。
  5. 三 flavor 行号:引用 BluetoothEventManager/BluetoothCallback 必标 flavor(见 21 §8)。