50 · 术语与类职责速查卡
A. 术语表
协议层
| 术语 | 含义 | 锚点 |
|---|---|---|
| BR/EDR | 经典蓝牙(79×1MHz 信道),车机连手机走这个 | 10 §1 |
| BLE | 低功耗蓝牙(40 信道,间距2MHz),钥匙/传感器/信标 | [10] §1 |
| ACL | 链路层基础管道,profile 跑其上;ACTION_ACL_CONNECTED 与 profile 无关 | [10] §4 |
| SDP | 经典蓝牙服务发现协议(BLE 侧=GATT/ATT) | [10] §3 |
| UUID | 128bit 服务标识;16bit 短码展开 0000XXXX-0000-1000-8000-00805F9B34FB | [10] §3 |
| CoD | Class of Device,24bit 类型码,major class 分 PHONE/AUDIO_VIDEO/… | [10] §2 |
| bond | 配对/绑定,交换并持久化密钥;BOND_NONE=10/BONDING=11/BONDED=12 | 11 §1 |
| SSP | Secure Simple Pairing,四模式:Just Works/Numeric Comparison/Passkey Entry/OOB | [11] §2 |
| Link Key | BR/EDR 128bit P-256 鉴权钥,落盘 bt_config.conf | [11] §1 |
| LTK/IRK | LE 长期钥/身份解析钥,SMP 分发 | [11] §5 |
| CTKD | Cross-Transport Key Derivation,BR→LE 方向从 Link Key 派生 LTK | [11] §5 |
| EIR | Extended Inquiry Result,扫描期广播包(含 UUID/Name),CarPlay 识别靠它 | 12 §3 |
| HFP | Hands-Free Profile,车机=HF 免提,手机=AG | [12] §1.1 |
| A2DP | 音频,车机=Sink 放音乐,手机=Source | [12] §1.2 |
| PBAP | 电话本同步,详情页唯一独立开关 | [12] §1.3 |
| CarPlay | Apple 私有协议(非蓝牙 profile),蓝牙只 EIR UUID 识别,数据走 WiFi | [12] §3 |
Android 框架层
| 术语 | 含义 | 锚点 |
|---|---|---|
| BluetoothAdapter/Device | 公开 API,binder 到 com.android.bluetooth(IBluetooth) + system_server(IBluetoothManager) | 20 §1 |
| BondStateMachine | Bluetooth App 进程配对状态机,发所有 BOND_xxx 广播;BONDED 前等 SDP | [20] §2 |
| Mainline 模块 | Bluetooth 自 Android 13 起 optional Mainline 模块,包名 com.android.bluetooth | [20] §1.1 |
| btsnoop | HCI 层抓包日志,/data/misc/bluetooth/logs/,Wireshark 看 | [20] §5 |
| isAutoConnectable | LocalBluetoothProfile 接口方法,框架层判断用,settingslib connect 链不调 | 21 §3 |
| disableAutoConnect | 写 Settings.Secure bluetooth_close_autoconnect,CarPlay 配对时阻止自动连;f3dif 失效 | [12] §5.2 |
本仓 / flavor
| 术语 | 含义 | 锚点 |
|---|---|---|
| flavor | 编译期 sourceSet:dcd→dcddif(骁龙8295) / xcd_cn_a14→xcddif(玄戒A14) / xcd_cn_a17→f3dif(玄戒A17主线) / xcd_global_a17→f3dif+global | 22 §1 |
| MICAR-PORTING | 小米定制标记;f3dif 0 个(纯AOSP),仅 dcddif/xcddif 有 | [21] §8 |
| DevicePairStageEvent | 三元组(isBusy/isConnected/mBondState)非枚举,边沿检测器 | 32 §4 |
| DOUBLE_BLUETOOTH_DEVICE_LIMIT | 双蓝牙上限=2,口径=已连 HFP/A2DP 数 | [32] §1 |
| taskAffinity 顶替 | 三对话框共用 car.settings.bluetooth+singleTask 互相顶替,CarPlay 弹窗需150ms延迟 | 02 §3 |
B. 本仓源文件职责表(settingsPage/micarConnectionSettings/.../bluetooth/)
| 类/文件 | 职责 | 关键行号 |
|---|---|---|
MiBluetoothUtils.kt | 蓝牙工具门面:扫描/配对/过滤/广播;getLocalBtManager、isDeviceClassTypeSupport、pair | getLocalBtManager:73, isDeviceClassTypeSupport:141-170, pair:242-262, RADIO_DEVICE_ADDRESS_PREFIX:37 |
MiBluetoothPairingController.kt | 单一配对意图翻译器:variant→弹框类型→确认API;onPair/onCancel | getDialogType:94-114, onPair:244-281, onCancel:283(旧版仅cancelBondProcess,2956未修复) |
MiBluetoothPairingRequest.kt | BroadcastReceiver:ACTION_PAIRING_REQUEST 入口,三层过滤(类型/手柄/双蓝牙) | 双蓝牙:85, disableAutoConnect:106, 手柄直通:62-65 |
view/MiBluetoothPairingDialogActivity.kt | 配对弹窗 Activity,receiver 监听 bondState | mReceiver, dismiss(无mDismissed,2956未修复) |
view/MiBluetoothPairingDialogFragment.kt | 配对弹窗 UI;自动 accept(isRequestPairAsClient) | 自动onPair:179-182 |
MiBluetoothPickerDialogActivity/Fragment.kt | 双蓝牙冲替 Picker | displayBluetoothDevicePicker:45/53, dismiss接力:169 |
MiCarplayConnectTypeChooseDialogActivity/Fragment.kt | CarPlay 配对后选蓝牙vs CarPlay | 选CarPlay deeplink:137 |
DevicePairStageEvent.java | 三元组状态值(边沿检测) | :7-9 |
BluetoothScanManager.kt | 扫描闸门单例(AtomicBoolean+ReadWriteLock+WeakReference) | triggerScan:94, setCanExecuteScan:60 |
BluetoothDeviceService.kt | IntentService,断开后更新 last device 给音乐 App | :15 |
ConnectionUtils.kt | 互联能力判断(包名)+CarPlay UUID+disableAutoConnect+last device | CARPLAY_128UUID:30-31, disableAutoConnect:88-95, recordLastConnectedDevice:143-167 |
ConnectionConstants.kt | 常量:DOUBLE_BLUETOOTH_DEVICE_LIMIT=2(:19)、LAST_BONDED_BLUETOOTH_DEVICE(:34)、BLUETOOTH_CLOSE_AUTO_CONNECT(ConnectionUtils:32) | |
MiBluetoothExt.kt | performConnect:16/performDisConnect:32/performUnpair:55/isPairingAsClient:68 | |
MiBluetoothCollinear.kt | 唯一按 flavor 分:dcddif独立 + xcddif/f3dif共用 | |
view/BluetoothSettingsActivity.kt | 蓝牙页入口;resetScanFlag:44;ACTION_CLOSE_ACTIVITY:26 | |
view/BluetoothMainEntrySettingsFragment.java | 蓝牙主页 Fragment(BluetoothCallback);UI先行 | registerCallback:onStart:217 |
controller/BluetoothSwitchController.kt | 蓝牙开关,UI先行+防抖;mUIBluetoothSwitchState | resetScanFlag:209 |
controller/BluetoothUnbondedDevicesPrefController.java | 可用设备列表;持续扫描循环;DevicePairStageEvent消费 | triggerScan:128/171/419, 双蓝牙:524 |
controller/BluetoothBondedDevicesPrefController.java | 已配对列表;连接/断开/详情页入口 | handlePreferClick:167, showDisConnectConfirmDialog:221-244, connectDevice:246-301, 双蓝牙:295 |
controller/BluetoothOperationsController.java | 详情页 connect/disconnect/unpair 编排 | Connect:148, DisConnect:160, Unpair:179, 双蓝牙:132 |
controller/BluetoothDeviceProfilesPreferenceController.java | 详情页 profile 开关(钉死PBAP单引用) | mPbapClientProfile:41, isShow:68 |
view/MiCarBluetoothDeviceDetailFragment.java | 设备详情页;MisComplexSdk监听 | getCachedDevice, onCreate:73-79 |
C. settingslib 七姐妹(base/settingsLibAndroid/src/{flavor}/.../bluetooth/)
| 类 | 职责 | 三 flavor 要点 |
|---|---|---|
LocalBluetoothManager | 单例,聚合四件套 | getInstance f3dif双参:60-62 |
LocalBluetoothAdapter | 包装 BluetoothAdapter,startScanning | — |
BluetoothEventManager | 广播总线,action→Handler 路由 + mCallbacks | 广播数 dcddif18/xcddif29/f3dif20 |
CachedBluetoothDeviceManager | 设备缓存表 findDevice/addDevice | — |
CachedBluetoothDevice | 设备聚合体(bond+profile+名称);connect/onBondingStateChanged/onUuidChanged | onBondingStateChanged dcddif:839/xcddif:1050/f3dif双参:1147;黑名单仅 dcddif/xcddif |
LocalBluetoothProfileManager | profile 注册,updateLocalProfiles | — |
BluetoothCallback | UI 接入接口 | 方法数 dcddif10/xcddif15/f3dif11 |
改 settingslib 必须三栏对照(见 21 §8);f3dif 是纯 AOSP,MICAR 定制全回归。