不少 Google Pixel 用户插入中国移动、中国联通、中国电信 SIM 卡后,都会遇到一个典型问题:明明手机支持 4G、5G,网络也正常,但一打电话就掉到 2G / 3G,甚至无法拨出;有些机器没有 VoLTE 开关,也看不到 HD 或 VoLTE 标志。

Google Pixel 蜂窝信号概念示意图

过去解决这类问题,往往需要 Shizuku、ADB、Pixel IMS、Root,或者手动修改 CarrierConfig。现在可以尝试开源项目 VoLTE Toggle:

https://github.com/charlie-xing/volte-toggle

它最大的特点是:

不需要 Root,不需要电脑,直接在 Pixel 手机上就能尝试开启 VoLTE / VoNR / 5G SA。

一、volte-toggle 是什么?

volte-toggle 是一个针对 Google Pixel 的 Android 工具,主要目标是为中国大陆运营商 SIM 卡打开 Pixel 默认运营商配置中没有启用的 IMS 和 5G 相关能力。

主要面向:

  • 中国移动
  • 中国联通
  • 中国电信

能够修改的功能包括:

  • VoLTE
  • VoNR
  • 5G SA
  • VoWiFi

如果你的 Pixel 出现打电话掉 2G/3G、4G/5G 下无法正常通话,或者没有 VoLTE / HD 图标,可以尝试这个工具。

二、它和 Pixel IMS 有什么区别?

过去常见方案是:

Shizuku
    ↓
Pixel IMS
    ↓
修改 IMS / CarrierConfig

volte-toggle 采用另一种思路:

Pixel 手机
    ↓
无线调试
    ↓
手机 ADB 连接自己
    ↓
获得 shell 调试权限
    ↓
修改 CarrierConfig

手机无线调试、自连接与 IMS 配置流程概念图

它把 ADB 客户端直接集成进 App,因此不需要另外准备电脑、USB 数据线或者手工执行 adb 命令。

三、实现原理

Android 普通第三方 App 无法直接修改运营商 CarrierConfig,这类操作通常需要 MODIFY_PHONE_STATE 等系统级权限。

volte-toggle 内置 ADB 客户端 kadb,通过 Android Wireless Debugging 的本机回环端口连接手机自身,以 shell 调试身份启动应用自带的 instrumentation。

instrumentation 在应用自己的进程中运行,并借助 UiAutomation 临时采用 shell 权限,随后调用:

CarrierConfigManager.overrideConfig(subId, bundle)

覆盖运营商配置。

写入完成后,再调用:

TelephonyManager.resetIms(slot)

让 IMS 重新注册。

四、它修改了哪些配置?

VoLTE 相关配置包括:

carrier_volte_available_bool
enhanced_4g_lte_on_by_default_bool
carrier_volte_provisioned_bool

以及其他相关键。

VoNR 使用:

vonr_enabled_bool

5G SA 涉及:

carrier_nr_availabilities_int_array

此外还可以写入 VoWiFi 相关配置。

关闭对应 SIM 的功能时,会清除 override,恢复运营商默认配置。

五、下载安装

进入项目 Releases 页面下载最新版:

https://github.com/charlie-xing/volte-toggle/releases/latest

安装 volte-toggle.apk 即可。

如果 Android 提示不允许安装未知来源应用,按照系统提示给当前浏览器或文件管理器临时授予"安装未知应用"权限。

六、首次设置

1. 连接 Wi-Fi

首先打开 Wi-Fi,并连接到一个网络。

Android 无线调试依赖 Wi-Fi,因此这一步不能省略。

2. 开启开发者选项

进入:

设置
→ 关于手机
→ 版本号

连续点击"版本号"7 次,根据提示输入锁屏密码,直到系统提示已经进入开发者模式。

3. 开启无线调试

进入:

设置
→ 系统
→ 开发者选项
→ 无线调试

打开"无线调试"。

4. 配对 volte-toggle

打开 volte-toggle,在"ADB 通道"卡片中点击"开始配对"。

Android 会提供 6 位无线调试配对码。按照 App 提示输入配对码并完成配对。

当 ADB 通道显示:

已就绪

说明配对成功。

密钥会被记住,正常情况下不需要每次重新配对。

七、开启 VoLTE

确认 ADB 通道显示"已就绪"后,打开对应 SIM 卡的 VoLTE 开关。

App 会覆盖当前 SIM 的 CarrierConfig,然后重置 IMS。

等待几秒后,可以检查 IMS 是否重新注册。

需要注意的是,没有显示 VoLTE 图标并不一定代表 VoLTE 没有成功。

一个简单的测试方法是保持手机处于 LTE/4G,然后拨打电话。如果通话过程中仍然保持 LTE,而不是回落到 2G/3G,通常说明 VoLTE 已经工作。

八、开启 VoNR

在 Options 中勾选 VoNR,然后重新应用对应 SIM 的配置。

VoNR 即 Voice over New Radio,也就是通过 5G NR 网络承载语音。

不过能否真正使用 VoNR,还取决于:

  • Pixel 型号和基带
  • Android 版本
  • SIM 卡
  • 运营商
  • 当地基站
  • IMS 配置

因此打开 CarrierConfig 开关并不意味着一定能够注册 VoNR。

九、开启 5G SA

volte-toggle 还可以修改 carrier_nr_availabilities_int_array,用于开启 5G SA 相关能力。

SA 即 Standalone(独立组网)。

实际是否连接到 SA 网络,仍然取决于运营商、套餐、SIM、基站和设备支持情况。

十、VoWiFi

volte-toggle 还提供 VoWiFi 相关 CarrierConfig 开关,也就是 Wi-Fi Calling。

不过:

CarrierConfig 开启 VoWiFi ≠ 运营商一定允许 Wi-Fi Calling。

号码是否能够真正注册 Wi-Fi Calling,还取决于运营商后台 provisioning、IMS 策略以及所在网络环境。

设备开关到 SIM、运营商和 IMS 语音服务的条件链示意图

十一、最大的限制:重启后会失效

这是使用这个工具时最需要注意的一点。

volte-toggle 使用 CarrierConfigManager.overrideConfig() 进行非持久化覆盖。由于 Android 对非系统调用方的限制,手机重启以后 override 会丢失。

也就是说:

重启 Pixel
↓
CarrierConfig override 消失
↓
需要重新应用

项目因此提供:

Re-apply after boot
开机后自动重新应用

建议需要长期使用时开启。

但无线调试仍需处于可用状态。

十二、OTA 后建议重新应用

Android OTA、Pixel 月度更新、Feature Drop 或 Android 大版本升级后,建议重新打开 volte-toggle 并应用一次配置。

因为系统更新可能同时改变 CarrierConfig、IMS、Telephony 或 modem 相关组件。

十三、如何恢复原始配置?

如果开启以后出现通话、短信、IMS 注册或网络异常,可以关闭对应 SIM 的开关。

App 会清除 CarrierConfig override,恢复运营商默认配置。

相比直接修改系统文件,这种方案更容易恢复。

十四、需要 Root 或解锁 Bootloader 吗?

不需要。

它依赖的是:

Android Wireless Debugging
+
ADB shell
+
UiAutomation
+
CarrierConfig override

而不是 Magisk。

因此不需要:

  • Bootloader Unlock
  • Root
  • Magisk
  • LSPosed

对于无法 OEM 解锁 Bootloader 的运营商版 Pixel,这一点尤其有价值。

十五、需要电脑吗?

也不需要。

第一次配对和后续修改全部可以直接在 Pixel 上完成:

Pixel
↓
Wireless Debugging
↓
volte-toggle

十六、兼容性

项目 README 目前明确说明测试组合为:

Pixel 10 + 中国联通

其他 Pixel 型号、中国移动、中国电信以及不同 Android/基带版本的实际效果,需要自行测试。

所以不要把它理解成"安装 APK 就一定能开启 VoLTE"。

它主要解决的是 Pixel CarrierConfig 没有开放对应功能这一层问题。

如果问题来自运营商后台未开通 IMS、SIM 卡/号码限制、当地网络或基带兼容性,修改 CarrierConfig 仍然可能无效。

十七、Pixel 8 / Pixel 8a 值得尝试吗?

如果出现 LTE/5G 数据正常,但 IMS 无法注册,或者拨打电话直接回落 2G/3G,可以尝试:

① 开启无线调试
② volte-toggle 配对
③ 开启 VoLTE
④ 重置 IMS
⑤ 查看 IMS Registration

如果仍无法注册,再进一步检查 IMS Registration、Voice Network Type、Data Network Type 和 NR State,从而判断问题来自 CarrierConfig 还是运营商 IMS。

十八、安全注意事项

这是一个开源项目,主要通过本地无线调试连接手机自身。

无线调试本身属于 Android 开发者功能,不使用时可以根据自己的安全需求关闭。

项目 README 还特别提到 PairReceiver 当前设为 exported,主要是方便开发期间通过 adb 触发。如果自己编译并介意这一点,可以在 Manifest 中改为 false。

十九、构建方式

项目没有使用常规 Gradle 构建流程,而是提供:

./build.sh

大致流程:

aapt2
↓
javac
↓
d8
↓
打包 JNI
↓
zipalign
↓
apksigner

依赖以 jar 形式放在 libs/,包括 kadb、okio、kotlin-stdlib、kotlinx-coroutines、BouncyCastle、spake2、hiddenapibypass 等。

对于研究 Android 无线 ADB、本机 ADB、CarrierConfig 和 IMS 的开发者来说,这个项目本身也很值得参考。

二十、总结

如果你使用 Google Pixel,同时使用中国移动、中国联通或中国电信 SIM,volte-toggle 是一个值得尝试的开源工具。

它的核心思路可以概括为:

无线调试
    ↓
手机 ADB 连接自己
    ↓
获得 shell 调试权限
    ↓
覆盖 CarrierConfig
    ↓
重置 IMS
    ↓
VoLTE / VoNR / 5G SA / VoWiFi

最大的优势是:

无需 Root、无需电脑,也无需解锁 Bootloader。

但 CarrierConfig 只是 IMS/VoLTE 能否工作的其中一环,最终是否能够成功仍取决于运营商、SIM、号码 provisioning、Pixel 基带以及当地网络。

如果你的 Pixel 表现为"4G/5G 数据正常,但打电话掉 2G/3G",这个工具尤其值得测试。

项目地址

GitHub:

https://github.com/charlie-xing/volte-toggle

Releases:

https://github.com/charlie-xing/volte-toggle/releases/latest