android无法自动识别sim卡中短信中心号码(SMSC刷新error)的解决方法
前几日淘宝上买了一张联通3G的电话卡,拿到后迫不及待的放入手机想体验一下3G网络的快感,确实,网速很快,刷新网页那叫一个爽啊。不过没多久就遇到问题,短信能收不能发,*#*#4636#*#*进入手机信息,SMSC刷新出现“refresh error”,心想简单,自己写入后更新就行了;结果更新未出问题,但刷新后依然“refresh error”。
开始网上各种找,各种方法觉试了个遍,无解,唯一一条可能有用的就是让我去联通营业厅换卡。说实话卡没问题,至少放在媳妇儿的MT15I上正常工作。然后就怀疑是第三方ROM的问题,刷回官方ROM依然error,崩溃~
?
突然想到既然是自用,就无所谓自动识别和可以在某界面更换该号码,刚巧CM9的源代码也同步了一份,于是就从Mms的发送代码开始查起,最终定位到framewor/android/telephony下的SmsManager类,通过短信中心发送消息的代码就在这里面,定位参数scAddress,该参数为短信中心号码,既然系统无法读取那就在代码中写死该参数就可以了,相应位置加入“scAddress="+8613010470500"”,当然不止一处。编译,将编译好的framework.jar通过adb push进手机,重启,发送消息,成功!!!!!!!!!!!
?
下面是基于我编译的代码进行修改的方法,不涉及代码的修改和编译,所以仅需要java环境和smali以及baksmali即可(当然,解压缩的软件必备);
1.将你手机中的framework.jar拷贝到掉中。
2.用smali将framework.jar反编译,得到一个包含一堆smali文件的文件夹,比如是framework;
3.将附件的SmsManager.smali文件拷贝到\framework\android\telephony文件夹下,替换原文件,用文本编辑器打开SmsManager.smali,搜索"+8613010470500",将其替换为你所使用的短信中心号码(3处),保存。
4.用baksmali将framework文件夹编译为classes.dex。
5.将1中的framework.jar用压缩软件打开,将4中编译所得的classes.dex替换进压缩包中。
6.将5中所得的framework.jar放回手机的/system/framework,替换源文件,记得改权限。
?
?
补充一点,该方法对所有android系统均有效,因为从2.1到4.0我没发现该类有变更过。
?
?