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_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 广播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)。