Android教程網
  1. 首頁
  2. Android 技術
  3. Android 手機
  4. Android 系統教程
  5. Android 游戲
 Android教程網 >> Android技術 >> Android開發實例 >> Android 原生系統給電信發短信出現亂碼或者收不到的原因

Android 原生系統給電信發短信出現亂碼或者收不到的原因

編輯:Android開發實例

網上說的方法是修改/system/framework/framework.odex文件,找9a13040b,改為9a130408。

方法是沒錯,不過原理沒說清楚。
 

其實問題是出在 framework/base/telephony/java/com/android/internal/telephony/gsm/SmsMessage.java:

  1. public static SubmitPdu getSubmitPdu(String scAddress,  
  2.             String destinationAddress, String message,  
  3.             boolean statusReportRequested, byte[] header, int encoding) {  
  4.  
  5. // ...  
  6. if (encoding == ENCODING_7BIT) {  
  7.         // ...  
  8.         } else {  
  9.             // ...  
  10.             // TP-Data-Coding-Scheme  
  11.             // Class 3, UCS-2 encoding, uncompressed  
  12.             bo.write(0x0b);  
  13.         }  
  14. // ...  


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. 上一頁:
  2. 下一頁:
熱門文章
閱讀排行版
Copyright © Android教程網 All Rights Reserved