蜂窝网络知识库 · 总索引

小米智能座舱 MiCarSettings ·「连接」页 →「蜂窝网络」子模块全解 代码基线:fuben4_micarsettings/MiCarSettings dev 分支 · HEAD b006d1144(2026-09-20) 平台源码基线:/home/zbc/pangu/yu7(miui/frameworks/telephony) 建立日期:2026-09-21

这个模块是什么

车机(XCD 平台)同时内置两张 eSIM:卡 1 = 中国电信、卡 2 = 中国移动。 「蜂窝网络」区的优先运营商控件让用户三选一:

Tab语义通道值
中国电信数据固定走卡 1NETWORK_CTCC = 0
中国移动数据固定走卡 2NETWORK_CMCC = 1
智能双卡平台按网络质量自动切换(默认)NETWORK_AUTO = 2

设置 App 本身不执行任何网络切换——它只负责 UI、偏好持久化和把意图通过 TelephonyManagerEx 传给平台 telephony;真正的选卡/切卡/断网保护全部在平台侧。

文档导航(从易到难)

篇目适合谁内容
01-功能与页面结构新手功能语义、UI 结构、文案/Key 清单、可见即可说
02-整体架构与流程图新手→进阶分层架构、类关系、点击/开页/ECALL 全流程图(多图)
03-App 侧源码精讲进阶Controller / Tab 框架 / TelephonyUtil 逐段拆解,file:line
04-平台侧受理与执行进阶→深入TelephonyManagerEx→路由控制器→通道控制器全链,受理/执行分离
05-排障实战与常见问题排查问题历史 JIRA 定案复盘 + 排查 playbook + 决策树
06-速查卡所有人文件清单、常量、Settings key、adb 命令、对接人

学习路径建议

flowchart LR
    A["01 功能与页面结构<br/>知道它是什么"] --> B["02 架构与流程图<br/>知道数据怎么流"]
    B --> C["03 App 源码精讲<br/>改 UI/加门控看这"]
    C --> D["04 平台侧受理与执行<br/>甩单/联调看这"]
    D --> E["05 排障实战<br/>有单看这"]
    F["06 速查卡<br/>随用随查"] -.贯穿.-> A & B & C & D & E
  • 只想改文案/加 Tab:01 + 03 的前两节
  • 要改交互/加 SIM 在位门控:01 → 02 → 03
  • 问题单责任分层(App vs 平台):02 的两张时序图 → 04 → 05

一句话架构

flowchart TB
    XML["connection_settings_fragment.xml:121<br/>NewTabPreference"] --> CTRL["TeleCommunicationSelectController<br/>(连接页 Controller)"]
    CTRL --> UTIL["TelephonyUtil(反射封装)<br/>xcddif/f3dif 全功能 · dcddif 空桩"]
    UTIL --> EX["android.telephony.TelephonyManagerEx<br/>平台隐藏 API"]
    EX --> BINDER["IAutoTelephony(binder)"]
    BINDER --> ROUTE["MultiInternetRouteController<br/>受理层:记偏好,恒 true"]
    ROUTE --> SMART["SmartDataChannelController<br/>执行层:rat 校验,不满足直接 ignore"]
    SMART --> MODEM[("modem / UICC<br/>卡1=电信 卡2=移动")]

⚠️ 整个模块最重要的认知:平台是「受理/执行分离」——setUserDefaultChannel 返回 true 只代表”偏好被记下了”,不代表网络真的切过去了。详见 04 篇。