连接知识库 · 总索引

小米智能座舱 MiCarSettings ·「连接」模块全解 模块根目录:settingsPage/micarConnectionSettings/ 约 110 个源文件,覆盖 蓝牙 / WLAN / 个人热点 / 手车互联(CarPlay·CarLink·AndroidAuto·小米互联) / 蜂窝网络 / 卫星通信 建立日期:2026-07-15 · 分支 dev · HEAD 583a310c8

子知识库导航

子库入口体例
蓝牙知识库00-蓝牙-README.md基础概念→框架→模块流程→排障→精讲
WLAN知识库00-WLAN-README.md同蓝牙体例(姊妹库)

本知识库由「7 个 Explore Agent 并行探索 + 主控独立对抗审查(亲自 grep/直读源码)」产出。 所有结论带 文件路径:行号,文案以 values-zh-rCN/strings.xml 直抄为唯一准绳。 对抗审查发现的错误/bug 见 _对抗审查记录.md,已核实事实见 _已核实事实基准.md


一、连接模块全景

连接页是车设 13 个一级页面之一,在 app/src/region/{cn|global}/res/xml/miauto_top_level_menu_fragment.xml:79-86 静态声明(Lemans ECE 车型隐藏入口)。页面别名 PageAlias.PAGE_CONNECTION = "connection"

flowchart TB
    Menu["车设顶层菜单<br/>miauto_top_level_menu_fragment.xml"]
    Menu -- "点击连接(语音可搜)<br/>psk_settings_connection_entry" --> Top

    subgraph Top["ConnectionSettingsTopFragment<br/>@Module(TAG_CONNECTION) @VoiceSearchProvider @MonitorFragment<br/>connection_settings_fragment.xml"]
        direction TB
        C1["① 基础连接<br/>pk_connection_basic_category"]
        C2["② 手车互联<br/>pk_connection_complex_category<br/>全无能力时整组隐藏"]
        C3["③ 蜂窝网络<br/>pk_connection_vehicle_network_category<br/>DCD 平台隐藏"]
        C4["④ 移动网络<br/>pk_connection_mobile_network<br/>无卫星能力时隐藏"]
    end

    Top -.getRightFragment().-> Right["ConnectionSettingsRightFragment<br/>车模(雷达/卡钳 4 图)"]

    C1 -- 蓝牙 intent BLUETOOTH_SETTINGS --> BT[BluetoothSettingsActivity]
    C1 -- WLAN intent WIFI_SETTINGS --> WF[WifiSettingsActivity]
    C1 -- 热点 intent HOTSPOT_SETTINGS --> HS[HotspotSettingActivity / MiCarHotspotSettingsActivity]
    C2 -- URI mis://complex/connect --> Link[外部互联 app<br/>com.mi.car.carplay 等]
    C3 -- Tab 内切换 --> Tel[TeleCommunicationSelectController]
    C4 -- 卫星 intent SATELLITE_COMMUNICATE --> Sat[SatelliteSettingsActivity]

    MSdk[("MisComplexSdk aar<br/>com.xiaomi.phonecarlink:complex:0.1.40")] -.状态回调.-> Top

四大类入口一览(文案直抄 values-zh-rCN/strings.xml

分组入口用户可见文案跳转方式
① 基础连接蓝牙”蓝牙”intent BLUETOOTH_SETTINGS
WLAN”WLAN”intent WIFI_SETTINGS(+extra refer)
热点”热点”intent HOTSPOT_SETTINGS
② 手车互联小米设备互联”小米设备互联” / “连接同账号的小米手机”URI mis://complex/connect?action=mirror_setting
CarPlay”Apple CarPlay” / “连接 iPhone”URI ?action=carplay_connect
CarLink”ICCOA Carlink” / “连接 Android 手机”URI ?action=carlink_connect
Android Auto”Android Auto” / “连接 Android 手机”URI ?action=android_auto_connect
③ 蜂窝网络优先运营商”优先运营商”(电信/移动/智能双卡)Tab 内切换(DCD 隐藏)
④ 移动网络卫星通信”卫星通信” / “可通过天通卫星接打电话”intent SATELLITE_COMMUNICATE

⚠️ 注意:CarLink 用户可见名是 “ICCOA Carlink”(大写 L);CarLink 与 Android Auto 的 summary 同为”连接 Android 手机”。


二、核心机制速查(5 条最重要结论)

1. 手车互联能力 = 对应 app 是否预装(非配置/属性)

bluetooth/ConnectionUtils.kt:35-59,全靠 PackageUtils.isPkgInstalled

方法判断的包名
isMiuiShareSupportedcom.xiaomi.mitv.smartshare
isCarPlaySupportedcom.mi.car.carplay com.desaysv.carplay(小米自研 ∪ 德赛西威)
isCarLinkSupportedcom.mi.car.carlink
isAndroidAutoSupportedcom.mi.car.androidauto

by lazy 进程内只查一次 → 安装/卸载 app 后需重启 Settings 才刷新入口(潜在不一致)。

2. 蓝牙扫描有一把全局闸门 BluetoothScanManager

单例 objectbluetooth/BluetoothScanManager.kt),AtomicBoolean + ReentrantReadWriteLock + WeakReference<ScanStateListener>triggerScan → MiBluetoothUtils.startDiscovery → LocalBluetoothAdapter.startScanning(true)force=true 绕过 settingslib 5 分钟节流。禁扫场景全仓库仅 2 处,全在 CarPlay 配对链路(普通配对不禁扫)。

3. 蓝牙发现 = 三层叠加

settingslib 事件总线base/settingsLibAndroid/)+ 本仓扫描闸门 + 两个列表 Controller(已配对 BluetoothBondedDevicesPrefController / 可用 BluetoothUnbondedDevicesPrefController)。持续扫描循环:onScanningStateChanged(false) 即重扫,直到 onPauseBOND_BONDING。详见 01-蓝牙-发现流程.md

4. MisComplexSdk 状态分发用「全局 getConnectInfo()」

ConnectionSettingsTopFragment 注册 IComplexConnectListener,收到回调后遍历 4 个 LinkController 调 onConnectStateChange;每个 Controller 取全局 getConnectInfo(),仅当 info.type == 自己的 CONNECT_TYPE 时显示设备名。前提假设:同一时刻只有一种互联 active。类型枚举:DEFAULT=0/MIRROR=1/CARPLAY=2/CARLINK=3/ANDROID_AUTO=4。

5. 个人热点存在两套并行实现

  • A 套MiCarHotspot*(大写 S)+ WifiTetheringHandler + hotspot/HotSpotViewModel
  • B 套Hotspot* + HotspotUtils + viewmodel/HotspotViewModel 改 A 不影响 B,排查前必先确认入口。真正 startTethering 只有 startMicarSoftAp 一处,不用 WifiManager.startTethering/TetheringManager

三、平台差异(DCD vs XCD)

  • DCD 平台 = ro.board.platform == "msmnile"DeviceUtil.java:226-228
  • DCD 隐藏蜂窝网络分组(双卡选择);XCD P2.1 板子有双 eSIM(卡1电信/卡2移动)才显示
  • 多处 flavor 双份源码:src/dcddif/ vs src/xcddif/TelephonyUtilMiCarWifiCollinearbase/WifiTrackerLibbase/settingsLibAndroid)——改一处要同步改两套
  • ⚠️ DCD 的 TelephonyUtil.isSupportSatelliteByDevice 有反射 receiver bug(见对抗记录 Bug 1)

四、文档索引

docs/连接/
├── 00-README.md                      ← 本文件(总索引 + 全景)
├── _已核实事实基准.md                 ← 主控直读的文案库/能力依据/扫描主干(金标准)
├── _对抗审查记录.md                   ← 5 疑点核实 + 文案纠正
├── 01-连接主页架构与路由.md           ← 页面结构/动态显隐/路由/MisComplexSdk 分发
├── 蓝牙/
│   ├── 00-蓝牙-README.md             ← 蓝牙子索引 + 三层架构总览
│   ├── 01-蓝牙-发现流程.md           ← ★重点:扫描闸门/触发/结果渲染/谁禁扫
│   ├── 02-蓝牙-配对流程.md           ← Pairing/Picker/CarplayChoose 对话框 + 状态机
│   └── 03-蓝牙-设备详情与状态控制.md  ← 详情页/PBAP profile/开关状态机
├── WLAN/
│   └── WLAN-全流程.md                ← 扫描/连接/Provision 引导/NetworkRequest 弹窗
│   └── WLAN列表重建风暴与ANR机制详解.md ← ★性能案例:重建风暴四环放大/no-focused-window ANR/monkey 白名单(N801PROB-137881)
├── 个人热点/
│   └── 热点-全流程.md                ← 两套实现/开关/配置/QR 分享/客户端/多形态
│   └── reboot-热点关闭与恢复机制.md   ← reboot 时 init 停机相位差/daemon-death recovery/persist 语义/双机对照取证(MANNPROB-2933)
└── 车机互联/
    ├── 01-车机互联-CarPlay-CarLink-AndroidAuto.md  ← 能力依据/状态分发/CarPlay 二次弹窗
    └── 02-蜂窝网络与卫星通信.md       ← 双卡选择/卫星弹窗/网络引导二维码

五、关键文件速查表

领域核心文件(相对 settingsPage/micarConnectionSettings/src/main/java/com/android/car/settings/miauto/
连接主页connection/view/ConnectionSettingsTopFragment.javaconnection/ConnectionConstants.ktbluetooth/ConnectionUtils.kt
蓝牙扫描闸门bluetooth/BluetoothScanManager.kt
蓝牙工具bluetooth/MiBluetoothUtils.ktMiBluetoothExt.kt
蓝牙 settingslibbase/settingsLibAndroid/src/{dcddif,xcddif}/java/com/android/settingslib/bluetooth/
WLAN 数据源base/WifiTrackerLib/src/{dcddif,xcddif}/java/com/android/wifitrackerlib/
热点开关hotspot/controller/TetherSwitchController.kthotspot/WifiTetheringHandler.javahotspot/HotspotUtils.kt
互联基类connection/controller/BaseVehicleLinkPreferenceController.java
互联 SDKaar com.xiaomi.phonecarlink:complex:0.1.40,init 点 app/.../AsyncThreadStartTask.java:217-220
蜂窝/卫星telecomm/TeleCommunicationSelectController.ktsatellite/SatelliteSettingDialog.ktsrc/{xcddif,dcddif}/.../TelephonyUtil.kt
页面 XMLres/xml/connection_settings_fragment.xml
文案res/values-zh-rCN/strings.xml(中文)、res/values/strings.xml(默认)