
家里那台吃灰很久的小米5翻出来当备用机插上电信卡准备收验证码结果电话打不出去、短信也收不到折腾一圈才发现又是VoLTE的老问题。这台2016年的骁龙820旗舰硬件上完全支持4G高清语音但小米官方固件默认只对中国移动开放了VoLTE开关电信和联通卡插进去IMS根本注册不上通话只能回落到已经被运营商逐步退网的2G/3G结果就是一打电话就断、短信石沉大海。这篇文章就是针对小米5写的一份完整排查和解决记录同时也是“老款小米手机打不了电信联通VoLTE电话短信”系列的第二篇。适合手里还有小米5、小米Note 2、小米MAX这类老高通机型的用户按步骤操作就能把VoLTE功能开回来让旧手机重新变成能正常打电话发短信的备用机。1. 项目背景小米5为什么会被VoLTE卡住1.1 电信联通清退2G/3G老手机最先遭殃这几年运营商的网络策略很明确就是把频谱资源从2G/3G往4G/5G腾挪。电信那边的CDMA网络先退联通也逐步关停GSM很多用户手里的老手机一夜之间发现插卡后电话打不出、短信收不到问题往往不在卡上而在手机根本不支持运营商主推的VoLTE语音方案。很多人对VoLTE的理解停留在“高清通话”这个层面其实它的意义远不止音质更好。VoLTE全称Voice over LTE是把语音通话当成一种IP数据承载在4G网络里简单说以前打电话要走单独的老窄马路2G/3G线路VoLTE是直接上车流更宽、速度更快的主干道。好处是接通快、音质清晰、不会出现拨号后等半天才听到回铃音的情况而且通话时网络不会断开可以一边打电话一边上网查信息。麻烦就在这运营商已经在主力推进VoLTE老制式网络逐渐退出服务。手机如果没有正确开启VoLTE就只能去走那几条正在被拆除的老路一旦当地基站关闭老制式信号手机就陷入“显示满格信号但打不出电话”的尴尬局面。1.2 小米5硬件没问题问题出在固件配置上先给小米5说句公道话这台机器的通信底子并不差。骁龙820内置的MDM9X45系列基带支持LTE Cat.6/Cat.9国内的FDD-LTE和TD-LTE频段都覆盖了电信和联通的4G网络从物理层角度完全能握手。既然硬件没问题那卡壳只能出在软件层。小米5的MIUI版本一直更新到基于Android 7/8的MIUI 9/10官方在VoLTE支持上做了一个很典型的取舍默认只对中国移动开启了VoLTE开关电信和联通的VoLTE被配置文件锁死。小米的工程师当年这么做的原因也不难猜移动的VoLTE商业化推进最早、网络覆盖最完善先在自家旗舰机上验证跑通最稳妥而电信联通当时还没有大范围商用VoLTE干脆不开放。这种策略在当时可能问题不大等电信联通全面铺开VoLTE、老制式退网的时候小米5已经进入维护尾声官方没有再为它单独适配用户就只能自己动手。1.3 系列文章定位与本文适用机型这是系列的第二篇第一篇解决的是其他高通平台的旧机型本文聚焦小米5。之所以单独把小米5拎出来是因为它在破解时有一个比较典型的路径既可以通过修改build.prop属性来开启又可以通过替换vendor overlay配置来做更彻底的覆盖两种方案结合基本能应对绝大多数系统版本包括MIUI 9开发版、MIUI 10稳定版等常见状态。小米Note 2、小米5s、小米5s Plus、小米MAX、小米Note 3这些同期的机型底层实现和配置文件结构类似同样可以参考本文的方法。只要你手里是骁龙820/821/660/835这一代的高通平台旧手机电信联通卡开机无法呼出电话或者短信收不到先别急着扔按后面几步折腾一下大概率能救回来。2. 原理拆解VoLTE开关藏在哪、为什么改属性有效2.1 IMS注册机制手机上VoLTE有个“总闸”要说清楚修改哪些配置得先理解手机怎么实现VoLTE。VoLTE的底层依赖IMS即IP多媒体子系统它可以理解成运营商网络里的一个语音交换中心手机通过4G数据链路向这个中心注册注册成功后才能发起和接收语音、短信业务。手机端的工作流程里有个容易被忽略的细节IMS注册功能本身需要一把“总闸”只有系统认为这台设备支持VoLTE、并且当前运营商允许使用VoLTE时才会真正发起注册。高通平台上这把闸有两个主要控制位一个是modem侧的NV配置一个是Android框架层的属性开关。普通用户能操作的通常就是框架层属性下面要说的方法也全部集中在这一层。为什么改属性就能生效Android系统里有一类以persist.开头的系统属性会被property_service服务持久化记录。系统框架在启动时会读取这些参数决定是否启动ims服务、是否在设置里显示VoLTE开关、是否允许IMS发起注册。所以当我们在build.prop里加几行属性并重启相当于手动拨动了这把总闸让框架层的VoLTE能力从默认关闭变成开启。2.2 小米固件怎么“锁死”电信联通overlay机制小米比普通方案多做了一层控制就是用了Android的运行时资源覆盖机制简称RRO。厂商会把一些默认资源配置封装在独立的包里面放在/system/vendor/overlay/路径下系统启动时这些包的资源优先级会覆盖同名的系统资源用来做运营商定制、地区定制既不用改核心框架包也方便独立升级配置。小米5的VoLTE支持列表就是通过这一层控制的配置资源里默认把移动列为可启用VoLTE的运营商电信则不在白名单内于是系统界面里“启用VoLTE高清通话”的开关直接置灰或者干脆不显示。这就是为什么你在设置里翻来翻去找不到VoLTE选项的原因不是硬件不支持是配置资源把它藏了起来。理解了overlay机制就明白修改思路了要么直接给build.prop注入强制开启的属性让系统忽略配置里的运营商列表要么替换掉overlay包让系统真正认为这台设备支持电信联通VoLTE。第一种操作简单见效快第二种更根治但需要找到匹配的配置文件下面两种都会讲。2.3 三条路线对比属性修改、Overlay替换、拨号代码针对小米5业界流传最广的有三条路线我梳理一下优缺点。第一条是修改/system/build.prop在文件末尾追加4条属性。优点是操作门槛低、对绝大多数系统版本都有效缺点是部分MIUI版本在开机初始化时会重新检查并重置这些属性治标不治本的情况偶尔出现。第二条是替换/system/vendor/overlay/里的IMS配置包让系统资源层面彻底认为设备支持对应运营商的VoLTE。优点是改动稳定、设置项能正常显示、不易被重置缺点是需要下载或修改APK文件来源如果不靠谱会有风险新手操作起来也麻烦一点。第三条是利用高通平台的隐藏拨号代码比如*#*#86583#*#*这个代码可以在设备端切换运营商provisioning检查的开关状态输入后会看到类似“VoLTE carrier check was disabled”的提示。它的作用是让系统跳过“运营商是否允许该卡使用VoLTE”的检查直接尝试注册IMS。优点是秒操作、不需要root缺点是只解决“运营商检查”这一环如果框架层根本不支持VoLTE它也不会魔法般变出开关来。实际操作中我的建议是先用拨号代码配合build.prop属性修改两条腿走路。如果还不行再上overlay替换方案。3. 实操过程小米5开启电信联通VoLTE的完整步骤3.1 准备工作设备状态、工具和备份动手之前先确认三件事。第一手机必须已经解锁且具备root权限后面修改/system分区文件离不开root。第二电脑上装好ADB工具没有的话可以用Android Studio自带的platform-tools也可以下载单独的ADB工具包解压使用。第三小米5建议保持在MIUI 9/10的稳定版或开发版Android版本在7.0到8.0之间这套操作在这些版本上验证过如果刷了第三方ROM路径可能有差异。备份是很多人跳过的步骤我建议别省。在修改/system/build.prop之前先把原文件拉出来存好命令如下adb devices adb pull /system/build.prop如果你已经连上了adb并且授权了root/system分区还处于只读状态可以先执行一次adb root再adb remount把分区挂载成可写。这一步命令在不同设备上可能提示不一样只要看到remount succeeded就行。手机端也可以用MT管理器等工具直接操作但命令行的好处是可控、可复制不容易点错。注意如果手机里资料重要修改前对系统做一次完整备份。虽然改build.prop很少导致变砖但改错了权限或者文件格式可能会造成开机卡LOGO有备份才能安心。3.2 核心操作修改build.prop并注入属性确定设备状态没问题后进入主流程。先连接手机并在adb shell里把build.prop拉下来我的习惯是在电脑本地建一个工作目录方便后续操作mkdir volte_mi5 cd volte_mi5 adb pull /system/build.prop然后用任意文本编辑器打开build.prop在文件末尾注意一定是末尾不要插在中间去破坏原有键值顺序追加以下内容persist.dbg.ims_volte_enable1 persist.dbg.volte_avail_ovr1 persist.dbg.vt_avail_ovr1 persist.data.iwlan.enabletrue这四行的作用分别是persist.dbg.ims_volte_enable1IMS总开关置为开启persist.dbg.volte_avail_ovr1让框架认为当前设备支持VoLTE能力persist.dbg.vt_avail_ovr1开启VoLTE视频通话能力也就是VIlTEpersist.data.iwlan.enabletrue对应的是Wi-Fi Calling相关能力部分电信用户的配置环境下建议打开。从实际效果来看前两行是关键后两行属于锦上添花。保存后把文件推回手机并恢复权限adb push build.prop /system/build.prop adb shell chmod 644 /system/build.prop adb reboot重启后打开“设置 双卡和移动网络 SIM卡信息”电信或联通卡对应的菜单里应该能看到“启用VoLTE高清通话”开关把它拨到打开状态。有的MIUI版本这里显示的是“高清通话”或“VoLTE”位置基本一致。如果这里还是灰色的不能点先别急继续下面的隐藏菜单步骤。3.3 隐藏菜单用拨号代码绕开运营商检查重启完成后小米5的拨号盘里输入高通平台通用的测试代码*#*#86583#*#*输入完成后不会拨出电话屏幕会出现一行短提示大意是VoLTE运营商检查已关闭。这个操作的本质是给modem的nv项写一个“不检查运营商provisioning”的标记让设备不再去核对当前SIM卡的运营商是否在VoLTE白名单里。再进入另外一个测试菜单*#*#4636#*#*选择“手机信息”这里会看到当前SIM卡状态、IMEI、网络类型等信息。往下拉找到“打开VoLTE”按钮点击一下让它变为开启状态然后点“切换DNS”旁边的刷新按钮让网络状态重新初始化。观察最下方的“IMS注册”状态如果出现“已注册”或者“正在注册”说明IMS已经开始尝试向运营商网络注册了。这个组合动作在小米5上针对性很强build.prop负责让系统框架层支持VoLTE拨号代码负责让modem不再阻拦运营商检查两者配合才能让IMS真正注册上去。很多人在网上只试了隐藏菜单发现没效果就是因为前一步框架层的属性没打开IMS服务压根没启动。3.4 验证方案状态栏HD图标、通话与短信测试配置做完后不要急着下结论验证环节要做完整。重启手机后先看状态栏正常情况下电信或联通卡附近会出现“HD”或“VoLTE”的角标这是最直观的信号。接着做实际业务测试。第一步用另一台手机拨打这台小米5的号码等待接通观察小米5在通话过程中是否仍然保持4G网络如果状态栏网络图标显示4G而不是回落到H或者E说明VoLTE生效了。第二步用小米5主动拨打其它号码接通后播放一段语音听听听筒声音质量是否清晰有没有沙哑、断续。第三步关掉Wi-Fi让手机走流量数据进入“移动网络”界面查看通话过程中数据是否不断连。第四步互发短信尤其要测试发给电信或联通用户确认短信能正常送达。有的用户改完后状态栏能出现HD但拨打电话还是回落2G/3G这种情况大概率是当地电信联通的VoLTE网络覆盖还没有完全完善或者SIM卡的VoLTE功能没有在运营商侧开通。有一个笨办法把SIM卡换到另一台支持VoLTE的新手机上验证如果新手机能正常用VoLTE而小米5不行问题在手机如果新手机也一样掉到2G/3G问题在网络或卡本身。3.5 进阶方案替换overlay配置文件根治灰色开关对于build.prop方案驱动不了、设置开关始终灰色或者重启后配置被重置的情况可以走overlay替换路线。具体操作是去对应机型的技术社区找到适配小米5的VoLTE overlay配置文件包这个包本质上是一个APK里面包含修改后的IMS支持资源列表把电信和联通加进了白名单。拿到文件后通过命令放置到系统路径adb push VoLTEConfig.apk /system/vendor/overlay/ adb shell chmod 644 /system/vendor/overlay/VoLTEConfig.apk adb reboot重启后系统会加载这个覆盖包设置里的VoLTE开关通常会正常亮起。这里要特别强调来源不明的overlay包不要乱装尽量选择社区里口碑好、大家验证过的版本下载后核对文件MD5值有条件的话用压缩工具查看包内结构内容异常直接放弃。另一个需要留意的点是overlay包需要与系统版本匹配MIUI 9和MIUI 10的资源ID可能不一样你不可能强求一个包通吃所有版本。提示改overlay是比改属性更深的系统级改动操作之前建议用TWRP备份整个system分区万一新包和系统冲突恢复起来不用从头折腾。4. 常见问题与排查技巧实录4.1 状态栏不出现HD图标有哪些容易被忽略的原因很多人操作完发现HD图标始终不出现先不用着急怀疑手机坏了。我先给一个常见度排序第一你插的卡是卡槽2而MIUI对双卡VoLTE的支持出现过只有卡槽1才能正常注册IMS的情况把卡换到卡槽1再试一下。第二运营商侧没有开通VoLTE功能打电话给客服确认一下电信卡有些老套餐需要主动开通VoLTE服务联通卡一般默认开通但个别老套餐也存在未启用的情况。第三前面的隐藏菜单操作没有生效重新输入一次*#*#86583#*#*再看看屏幕有没有出提示。还有一个容易踩的坑刷了第三方精简ROM精简包把ims相关服务裁掉了。这种状态下无论怎么改属性都白搭因为根本没人和运营商网络做IMS握手。遇到这种建议先换回官方MIUI包再操作别在精简包上死磕。4.2 重启后VoLTE开关又消失怎么让修改持久化有用户反映第一次修改成功了但重启或系统更新后又回到原状。这个问题的根源在于MIUI在部分情况下会重新读取配置文件并覆盖属性。如果是系统更新导致配置恢复直接把系统更新关掉小米5这种老机型本来也不需要追新版本了。如果是重启后属性丢了重点检查persist分区是否剩余空间不足属性写入失败也会出现这种情况。比较持久的做法是写一个开机脚本自动补属性配合Magisk的思路可以做成一个开机自启脚本。原理不复杂就是让设备每次启动后自动执行几行setprop命令setprop persist.dbg.ims_volte_enable 1 setprop persist.dbg.volte_avail_ovr 1 setprop persist.dbg.vt_avail_ovr 1有了这个脚本兜底即使系统把属性重置了开机后也会自动改回来属于省心解法。4.3 语音通话正常但短信收不到可能是VoLTE短信没有打开VoLTE方案里语音和短信是同一个IMS通道承载的短信收不到的场景多半是IMS注册虽然成功但短信服务没有完全启用。可以在“设置 双卡和移动网络”里找一找有没有“通过VoLTE发送短信”一类的选项部分MIUI版本默认关闭把它打开。如果找不到这个选项再回到*#*#4636#*#*的“手机信息”页面点“刷新连接”并重新设置“打开VoLTE”让IMS注册状态重建一次。还有一个实践证明有效的土办法关掉Wi-Fi让数据网络保持在4G待机状态然后飞行模式开关一次强制模块重新入网短信功能往往就回来了。4.4 通话过程中掉网或对方听不清怎么排查VoLTE音频问题VoLTE通话掉网比较常见的是网络覆盖问题电信联通的VoLTE覆盖不是每个角落都好尤其是小区电梯、地下室、偏远路段VoLTE信号不强时系统可能切换到老网络承载语音但老网络又在退网结果就是通话中断。这种场景下优先检查SIM卡是否支持“C1X”或“eSRVCC”切换不过小米5年代较久这个功能支持有限只能说尽力而为。通话过程中对方听不清有概率是modem固件版本太老。可以尝试刷一个同版本号但更新modem基带的完整刷机包刷入后重新测试。操作难度中等新手不建议轻易全刷最好先备份当前固件有问题能回退。4.5 常见问题速查表现象可能原因排查与解决办法状态栏没有HD图标开关未打开 / 运营商未开通 / IMS未注册确认设置开关输入拨号代码把卡换到卡槽1设置里VoLTE开关灰色配置资源未覆盖 / ROM裁剪补build.prop属性或替换overlay配置文件能打电话但短信收不到VoLTE短信未启用 / IMS注册不完整开启短信相关选项飞行模式重新入网通话时回落到2G/3G当地覆盖不足 / SIM未开通 / 老固件问题换新机验证更新modem固件确认覆盖情况重启后配置丢失系统重置 / persist分区空间不足写开机脚本自动设置关闭系统自动更新刷第三方ROM后完全无效ROM缺少IMS核心服务换回官方MIUI包重新操作5. 实操心得与后续扩展5.1 这次折腾值得吗从纯经济角度算笔账一台小米5二手回收价可能还抵不上一顿饭钱但折腾半个小时后能当备用机、热点机、老人语音机价值感完全不同。问题在于很多人不知道这台老机器还能通过改配置救回来直接扔抽屉吃灰了这才是最可惜的。我这台小米5在这次修改后电信卡做主卡、联通卡做副卡备份平时放在家里当接线机用收验证码、接外卖电话都很稳定没有再出现过打不通的情况。5.2 安全提示别用来历不明的破解工具小米5开启了电信联通VoLTE之后网上相关教程下面总有人推荐“一键开启VoLTE”的破解工具我这里劝大家谨慎。这类工具往往需要root权限安装后干了什么你完全看不见轻则推送广告、后台跑流量重则直接把系统文件改坏。最稳妥的还是自己动手改build.prop和overlay所有操作自己可控出了问题也知道从哪里排查。5.3 后续还能扩展的地方VoLTE打开后如果手头还有其它同平台机型可以试试把这个思路迁移过去。比如骁龙835系列的小米6、骁龙660系列的机型配置文件结构相近方法基本能通用。想更深入的话还可以研究一下VoWiFi、ViLTE视频通话怎么通过类似方案开启不过这两项依赖运营商支撑可玩性比VoLTE低不少。折腾旧手机这事乐趣不在于设备本身多值钱而是通过配置文件搞清楚底层逻辑之后顺手把一台别人眼里的电子垃圾变成能正常服役的实用工具这种感觉还是挺爽的。