泛泰长短信修改教程(供其他泛泰机型参考)
允许转载,但是必须注明作者及原文连接
泛泰官方rom是根据韩国电信商定制的(也不算太高度,一般就是添加判断)。与三星、LG等韩国手机类似,按照韩国的三大电信运营商分为了S,L和K三个版本。
刷了泛泰韩版机的官方rom在中国地区使用,除了没有中文支持外,最显著的问题就是短信了。
近几个月,一直忙着离校还有入职的问题忘记与分享下泛泰短信修改问题。
不论是移动卡还是联通卡都可能遇到了如下几个问题:
1. 短信不能正常发送 (发数字短信给运营商)
2. 无论官方Rom内置的短信还是第三方短信软件比如Go短信等都只能发1条短信 (官方版本)
3. 短信收发有乱码 (官方4.03以前版本)
短信的问题是不少韩版机的通病。可惜由于泛泰官方系统修改短信网络上没有相关的资料,
没找到解决方案。没有国行的系统做对比(美版的泛泰机器系统是基于google源码的小量修改,无参考价值)最后,不得已静下心来花了些功夫看了泛泰的相关代码,参考了
终于找到了完美的解决方案。此解决方案应该通用,解决泛泰系列官方系统的长短信问题,在我用砖头机商家提供的手机上测试并在论坛经过了机友们的验证,是首个完美解决了泛泰长短信的。为了避免后来者再被此问题困扰,决定分享下我解决短信问题的思路和过程,希望能对其他韩版泛泰机型或者将来4.2rom短信问题的解决有所帮助,嘿嘿~~
借用hhcat的一些话:
短信工作的层次
Android手机短信工作大体涉及三个层次:apk应用层,framework层,基带。我们在手机写短信和发送短信的界面就是apk应用层,通常是/system/app下的Mms.apk,在我们点了发送按钮后,apk会调用framework发送短信,Rom中对应的文件是/system/framework/framework.jar。反编译framework.jar,可以看到相关的代码在android/telephoney和com/android/internal/telephoney两个文件夹内。framework最后会调用基带完成短信的发送。
在这三个层次中,韩国官方的基带在国内使用无任何问题,支持联通的wcdma和移动的gsm。而我们短信的问题主要就出在了apk应用层和framework层。
apk应用层分析
官方MMS.apk这个无解(工作量太大,不值得),由于官方的高度定制,(定制了专用短信发送通道)sendSMS..不经任何处理直接发送到framework底层
google官方sendSMS是 public void sendSMS(String paramString1, String paramString2, Message paramMessage)
泛泰定制sendSMS的是 public void sendSMS(String paramString1, String paramString2, Message paramMessage, int paramInt)
framework分析
通过代码分析、跟踪调试和对比google官方源码,发现虽然两者进入framework刚开始调用的函数不一样:韩版泛泰执行了sendTextWithCount,而google官方执行了sendText,但是之后都执行到了相同的函数sendSms。那么解决问题的思路就可以是从sendSms传入的参数开始调查起,回推两者执行路径上的差异。
通过代码分析和跟踪调试,我们终于发现了一个显著的差异。在韩版短信的调用路径上sendTextMessage竟然是调用sendTextWithCount而不是sendText。
修改后的正常代码:
public void sendTextMessage(String paramString1, String paramString2, String paramString3, PendingIntent paramPendingIntent1, PendingIntent paramPendingIntent2){if (TextUtils.isEmpty(paramString1))throw new IllegalArgumentException("Invalid destinationAddress");if (TextUtils.isEmpty(paramString3))throw new IllegalArgumentException("Invalid message body");try{ISms localISms = ISms.Stub.asInterface(ServiceManager.getService("isms"));if (localISms != null)localISms.sendText(paramString1, paramString2, paramString3, paramPendingIntent1, paramPendingIntent2);return;}catch (RemoteException localRemoteException){}}
经过简单修改,重新编译framework.jar,替换回手机,重启,然后惊喜地发现第三方短信软件Go短信可以正常发送长短信短信了!
至于发送运营商短信问题,解决方法也很简单,参考su_ky的IM-A820L运营商短信修改教程(供其他泛泰机型参考)。
官方的代码是
protected void sendText(String paramString1, String paramString2, String paramString3, PendingIntent paramPendingIntent1, PendingIntent paramPendingIntent2, String paramString4, int paramInt){Log.d("GSM", "=== sendText ===!! ");Object localObject;if ((SkyMsgConfig.getVendor() == 9) && (SkyMsgConfig.isRoamingSmsCReadFail())){String str2 = TelephonyManager.getDefault().getSmscAddress();if (str2 != null){Log.d("GSM", "### SendText TelephonyManager = " + str2);SkyMsgConfig.setRoamingSMSCReadFail(false);}}else{if ((SkyMsgConfig.getVendor() != 5) && (SkyMsgConfig.getVendor() != 9))break label199;if (!TextUtils.isEmpty(paramString4))break label192;localObject = ((TelephonyManager)this.mContext.getSystemService("phone")).getLine1Number();label108: if ((!TextUtils.isEmpty((CharSequence)localObject)) && (SkyMsgConfig.getVendor() != 99) && (SkyMsgConfig.getVendor() != 0))break label278;if (paramPendingIntent2 == null)break label272;}SmsMessage.SubmitPdu localSubmitPdu;label272: for (boolean bool1 = true; ; bool1 = false){localSubmitPdu = SmsMessage.getSubmitPdu(paramString2, paramString1, paramString3, bool1);sendRawPdu(SmsTrackerFactory(SmsTrackerMapFactory(paramString1, paramString2, paramString3, localSubmitPdu), paramPendingIntent1, paramPendingIntent2, getFormat(), paramInt));return;Log.e("GSM", "### SendText SMSC is Null SMSC READ FAIL");SkyMsgConfig.setRoamingSMSCReadFail(true);break;label192: localObject = paramString4;break label108;label199: String str1 = TelephonyManager.getDefault().getLine1Number();if (TextUtils.isEmpty(paramString4)){localObject = str1;if (!TextUtils.isEmpty((CharSequence)localObject))break label108;Log.e("GSM", "Can not read MSISDN from SIM");break label108;}if (paramString4.equals(str1.replace("+82", "0"))){localObject = str1;break label108;}localObject = paramString4;break label108;}label278: SmsHeader localSmsHeader = new SmsHeader();localSmsHeader.ReplyAddr = ((String)localObject);byte[] arrayOfByte = SmsHeader.toByteArray(localSmsHeader);if (paramPendingIntent2 != null);for (boolean bool2 = true; ; bool2 = false){localSubmitPdu = SmsMessage.getSubmitPdu(paramString2, paramString1, paramString3, bool2, arrayOfByte);break;}}
进行代码删除,剩下
protected void sendText(String paramString1, String paramString2, String paramString3, PendingIntent paramPendingIntent1, PendingIntent paramPendingIntent2, String paramString4, int paramInt){if (paramPendingIntent2 != null);for (boolean bool = true; ; bool = false){SmsMessage.SubmitPdu localSubmitPdu = SmsMessage.getSubmitPdu(paramString2, paramString1, paramString3, bool);if (localSubmitPdu == null)break;sendRawPdu(SmsTrackerFactory(SmsTrackerMapFactory(paramString1, paramString2, paramString3, localSubmitPdu), paramPendingIntent1, paramPendingIntent2, getFormat(), paramInt));return;}Log.e("GSM", "GsmSMSDispatcher.sendText(): getSubmitPdu() returned null", "modify by loogeo");}
重新编译framework.jar,替换回手机,重启,然后发现运营商代码问题也解决了!
至此,韩版rom的短信问题基本圆满解决了。短信无乱码了,长短信收发正常了,发送运营商也没问题了。
泛泰短信修改教程(供其他泛泰机型参考)
泛泰长短信修改教程(供其他泛泰机型参考)相关推荐
- 泰拉瑞亚服务器修改物品,泰拉瑞亚1.4自定义物品名称方法 自定义物品名称详细教程_逗游网...
在泰拉瑞亚1.4版本中我们可以通过一款插件来为游戏中的道具来进行名称自定义,下面就为大家带来详细的操作教程,供各位玩家们参考. 自定义物品名称教程 首先下载我们需要的文件 提取码:a3k0 1.获取翻 ...
- 泰拉瑞亚怎么样修改服务器时间,泰拉瑞亚如何修改时间 安卓版时间修改教程...
最近有很多玩家反映,在玩泰拉瑞亚的时候,这个白天和黑夜不能控制好烦啊,但是没关系,今天小编呢就给大家带来泰拉瑞亚安卓版时间修改教程,跟随小编的脚步一起来看看这篇攻略吧,希望能帮助到大家. 准备工具,烧 ...
- 三大开源生信基础教程(bookdown编写,源码可作为模板)和视频课程
开源生信 R 教程 http://www.ehbio.com/Bioinfo_R_course/ 1 思考题 2 R基础 2.1 R安装 2.2 Rstudio基础 2.2.1 Rstudio版本 2 ...
- 三大开源生信基础教程和视频课程
开源生信 R 教程 http://www.ehbio.com/Bioinfo_R_course/ 1 思考题 2 R基础 2.1 R安装 2.2 Rstudio基础 2.2.1 Rstudio版本 2 ...
- 生信宝典教程大放送,一站式学习生信技术
生物信息学包含生物数据分析.数据可视化.重复工作程序化,是生物.医学科研必备的技能之一.生信宝典精心组织生信学习系列教程.生信工具精品教程,通过大量的生信例子.关键的注释.浓缩的语句和录制的视频帮助快 ...
- gsm短信猫长短信pdu数据包分析[转]
原文地址:gsm短信猫长短信pdu数据包分析作者:sunnyboy 查看原文:http://blog.appdoc.cn/2011/04/29/gsm-pdu-packet-analyze [capt ...
- mysql修改游戏元宝_页游源码【武斗乾坤】自带安装启动教程+元宝游戏数据修改教程+自由一键游戏启动服务端...
页游源码[武斗乾坤]自带安装启动教程+元宝游戏数据修改教程+自由一键游戏启动服务端_站长下载 资源说明: 1.本资源为一键启动服务端,只需要安装好所需组件一键启动即可运行. 2.资源默认为单机架设,无 ...
- android自动改,【玩机组ROM修改教程】自己修改安卓ROM 刷机包教程
本帖最后由 威风凛凛77 于 2018-5-4 18:02 编辑 偉鎽凛凛头衔01.gif (279.94 KB, 下载次数: 85) 2018-5-4 12:41 上传 [玩机组ROM修改教程]自己 ...
- destoon7.0第三方短信插件下载 destoon7.0整合云信通短信平台教程
destoon7.0整合云信通短信插件 destoon7.0完全替代官方短信插件 信通短信价格和阿里大鱼一样,到达速度也差不多,最主要的一个好处是无需设置模板,完全可以继承destoon官方默认模板. ...
最新文章
- struct和union的大小问题
- 利用C#语言实现小闹钟
- C#中类与结构体的区别
- 最全三大框架整合(使用映射)——DeptAction.java
- LeetCode 968. 监控二叉树(DFS)
- git-创建版本仓库-创建版本-查看版本
- CSS英文单词强制换行
- 网络请求与本地函数调用的区别
- LeetCode刷题(15)
- springMVC的controller单例和多例下成员变量的问题
- 如何删除拒绝访问的文件
- .NET URL 301转向方法的实现
- tv盒子管理助手android版本,TV盒子工具 管理电视盒子的好助手
- 大佬都是怎么画交换机拓扑图的?都给你整理好了
- android 获取默认字体,Android中的默认字体系列是什么?
- 动态添加element标签,数据操作
- MATLAB的矩阵输入
- 金山卫士界面源码解读及界面库分离(4)
- 系统架构设计——互联网金融架构设计
- CSDN博客给我带来的一些诱惑和选择机会
热门文章
- Matlab与Access数据库编程指南
- 医学研究中危险因素探索的分析思路
- Python爬虫-爬取豆瓣读书
- 符号_和平精英名字特殊符号怎么打?哪些特色符号可以用?
- hibernate之HQL实体更新与删除
- matlab 图片的读入和显示(imread函数和figure函数)
- 移植u-boot-2010.12.tar.bz2版本到s3c2440过程
- [译] 什么是即时通信(Instant Messaging)
- EXCEL应用:思迈特软件Smartbi数据可视化终极教程
- mysql purge master logs_PURGE MASTER LOGS语法--MySql数据库