允许转载,但是必须注明作者及原文连接

泛泰官方rom是根据韩国电信商定制的(也不算太高度,一般就是添加判断)。与三星、LG等韩国手机类似,按照韩国的三大电信运营商分为了S,L和K三个版本。

刷了泛泰韩版机的官方rom在中国地区使用,除了没有中文支持外,最显著的问题就是短信了。

近几个月,一直忙着离校还有入职的问题忘记与分享下泛泰短信修改问题。

不论是移动卡还是联通卡都可能遇到了如下几个问题:
1. 短信不能正常发送 (发数字短信给运营商)
2. 无论官方Rom内置的短信还是第三方短信软件比如Go短信等都只能发1条短信 (官方版本)
3. 短信收发有乱码 (官方4.03以前版本)

短信的问题是不少韩版机的通病。可惜由于泛泰官方系统修改短信网络上没有相关的资料,

没找到解决方案。没有国行的系统做对比(美版的泛泰机器系统是基于google源码的小量修改,无参考价值)最后,不得已静下心来花了些功夫看了泛泰的相关代码,参考了

hhcat 在机锋上的[教程] 证明我们曾一起玩过e120(系列三):韩版短信问题的完美解决

终于找到了完美的解决方案。此解决方案应该通用,解决泛泰系列官方系统的长短信问题,在我用砖头机商家提供的手机上测试并在论坛经过了机友们的验证,是首个完美解决了泛泰长短信的。为了避免后来者再被此问题困扰,决定分享下我解决短信问题的思路和过程,希望能对其他韩版泛泰机型或者将来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. 泰拉瑞亚服务器修改物品,泰拉瑞亚1.4自定义物品名称方法 自定义物品名称详细教程_逗游网...

    在泰拉瑞亚1.4版本中我们可以通过一款插件来为游戏中的道具来进行名称自定义,下面就为大家带来详细的操作教程,供各位玩家们参考. 自定义物品名称教程 首先下载我们需要的文件 提取码:a3k0 1.获取翻 ...

  2. 泰拉瑞亚怎么样修改服务器时间,泰拉瑞亚如何修改时间 安卓版时间修改教程...

    最近有很多玩家反映,在玩泰拉瑞亚的时候,这个白天和黑夜不能控制好烦啊,但是没关系,今天小编呢就给大家带来泰拉瑞亚安卓版时间修改教程,跟随小编的脚步一起来看看这篇攻略吧,希望能帮助到大家. 准备工具,烧 ...

  3. 三大开源生信基础教程(bookdown编写,源码可作为模板)和视频课程

    开源生信 R 教程 http://www.ehbio.com/Bioinfo_R_course/ 1 思考题 2 R基础 2.1 R安装 2.2 Rstudio基础 2.2.1 Rstudio版本 2 ...

  4. 三大开源生信基础教程和视频课程

    开源生信 R 教程 http://www.ehbio.com/Bioinfo_R_course/ 1 思考题 2 R基础 2.1 R安装 2.2 Rstudio基础 2.2.1 Rstudio版本 2 ...

  5. 生信宝典教程大放送,一站式学习生信技术

    生物信息学包含生物数据分析.数据可视化.重复工作程序化,是生物.医学科研必备的技能之一.生信宝典精心组织生信学习系列教程.生信工具精品教程,通过大量的生信例子.关键的注释.浓缩的语句和录制的视频帮助快 ...

  6. gsm短信猫长短信pdu数据包分析[转]

    原文地址:gsm短信猫长短信pdu数据包分析作者:sunnyboy 查看原文:http://blog.appdoc.cn/2011/04/29/gsm-pdu-packet-analyze [capt ...

  7. mysql修改游戏元宝_页游源码【武斗乾坤】自带安装启动教程+元宝游戏数据修改教程+自由一键游戏启动服务端...

    页游源码[武斗乾坤]自带安装启动教程+元宝游戏数据修改教程+自由一键游戏启动服务端_站长下载 资源说明: 1.本资源为一键启动服务端,只需要安装好所需组件一键启动即可运行. 2.资源默认为单机架设,无 ...

  8. android自动改,【玩机组ROM修改教程】自己修改安卓ROM 刷机包教程

    本帖最后由 威风凛凛77 于 2018-5-4 18:02 编辑 偉鎽凛凛头衔01.gif (279.94 KB, 下载次数: 85) 2018-5-4 12:41 上传 [玩机组ROM修改教程]自己 ...

  9. destoon7.0第三方短信插件下载 destoon7.0整合云信通短信平台教程

    destoon7.0整合云信通短信插件 destoon7.0完全替代官方短信插件 信通短信价格和阿里大鱼一样,到达速度也差不多,最主要的一个好处是无需设置模板,完全可以继承destoon官方默认模板. ...

最新文章

  1. struct和union的大小问题
  2. 利用C#语言实现小闹钟
  3. C#中类与结构体的区别
  4. 最全三大框架整合(使用映射)——DeptAction.java
  5. LeetCode 968. 监控二叉树(DFS)
  6. git-创建版本仓库-创建版本-查看版本
  7. CSS英文单词强制换行
  8. 网络请求与本地函数调用的区别
  9. LeetCode刷题(15)
  10. springMVC的controller单例和多例下成员变量的问题
  11. 如何删除拒绝访问的文件
  12. .NET URL 301转向方法的实现
  13. tv盒子管理助手android版本,TV盒子工具 管理电视盒子的好助手
  14. 大佬都是怎么画交换机拓扑图的?都给你整理好了
  15. android 获取默认字体,Android中的默认字体系列是什么?
  16. 动态添加element标签,数据操作
  17. MATLAB的矩阵输入
  18. 金山卫士界面源码解读及界面库分离(4)
  19. 系统架构设计——互联网金融架构设计
  20. CSDN博客给我带来的一些诱惑和选择机会

热门文章

  1. Matlab与Access数据库编程指南
  2. 医学研究中危险因素探索的分析思路
  3. Python爬虫-爬取豆瓣读书
  4. 符号_和平精英名字特殊符号怎么打?哪些特色符号可以用?
  5. hibernate之HQL实体更新与删除
  6. matlab 图片的读入和显示(imread函数和figure函数)
  7. 移植u-boot-2010.12.tar.bz2版本到s3c2440过程
  8. [译] 什么是即时通信(Instant Messaging)
  9. EXCEL应用:思迈特软件Smartbi数据可视化终极教程
  10. mysql purge master logs_PURGE MASTER LOGS语法--MySql数据库