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

來源:互聯網
上載者:User

網上說的方法是修改/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,這個要請專業人士解答了。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.