网上说的方法是修改/system/framework/framework.odex文件,找9a13040b,改为9a130408。

方法是没错,不过原理没说清楚。

其实问题是出在 framework/base/telephony/java/com/android/internal/telephony/gsm/SmsMessage.java:

public static SubmitPdu getSubmitPdu(String scAddress,            String destinationAddress, String message,            boolean statusReportRequested, byte[] header, int encoding) {// ...if (encoding == ENCODING_7BIT) {        // ...        } else {            // ...            // TP-Data-Coding-Scheme            // Class 3, UCS-2 encoding, uncompressed            bo.write(0x0b);        }// ...}

Framework 里面有两个 SmsMessage 类,一个在 gsm 包下面,一个在 cdma 包下面。在移动和联通的网络下,自然就是调用 gsm 包下面的 SmsMessage 类了,它在创建 SMS PDU 的时候,代码如上,其中指定 TP-DCS 的时候,0x0b 也就是 0x00001011,末尾两位 11 的意思是消息类型是 Class 3 (这里可以查 TP-DCS 定义 TP-DCS)

9a13040b 改成 9a130408,其实就是把 bo.write(0x0b) 改成了 bo.write(0x08),0x08 也就是 0x00001000,消息类型就是 Class 0 了。至于电信为啥要求短信的消息类型是 Class 0,这个要请专业人士解答了。

更多相关文章

  1. Android录制或播放语音消息时关闭其他媒体播放
  2. android学习笔记36:消息提示
  3. Android时间获取之——Date、String、Long三种日期类型之间的相
  4. Android简单类型资源(Bool、Color、Dimension、ID、Integer、Inte
  5. android activity之间传递bean类型数据
  6. Android Logo消息角标数字提醒
  7. android 判断 网络 类型
  8. Android中Data和String数据类型转换
  9. Android点击通知栏消息,仅打开App,不跳转到具体Activity

随机推荐

  1. Android应用启动后自动创建桌面快捷方式
  2. android文本内容自动朗读实例教程
  3. Android验证码倒计时实现方式总结
  4. android应用安全——通信安全(android htt
  5. Android入门篇五:使用全局变量在Activity
  6. Android输入法原理和疑云
  7. Android(安卓)之 zygote 与进程创建
  8. 3.4 管理项目 - 创建Android库
  9. 基于Android的MediaPlayer的音乐播放器的
  10. AQuery简介:jQuery for Android