2011-06-08 41 views
1

我下面的步驟什麼是收到短信的Android

  1. 字符串sms_txt = 「AAAAAAAAAA」 短信PDU格式;
    SubmitPdu smsg = SmsMessage.getSubmitPdu(「+ 919412354222」,「+ 919535570716」,sms_txt,false);從SMSG

  2. 記下編碼消息值編碼的消息= [1,0,12,-111,25,89,83,117,112,97,0,0,10,-31,112, 56,28,14,-121,-61,-31,48]

  3. byte [] sBuf = {1,0,12,-111,25,89,83,117,112,97,0 ,0,10,-31,112,56,28,14,-121,-61,-31,48};
    SmsMessage smsg1 = SmsMessage.createFromPdu(sBuf);

我越來越mWrappedSmsMessage = NULL

所以我的問題是: 什麼是PDU數據之間的差異,從getSubmitPdu函數創建和預期PDU輸入createFromPdu functiom?

回答

1

我想在某些單元測試中使用getSubmitPdu,所以我開始通過調試GSM源代碼來找到答案。簡而言之,getSubmitPdu充滿了問題。它至少做了兩件與createFromPdu不兼容的東西(我認爲它對於GSM來說是正確的,因爲它可以用於從BroadcastReceiver提供的傳入SMS意圖中創建一個SmsMessage)。我沒有看到比我發現的兩個更遠的地方。

首先,它嘗試使用第一個字節作爲協議信息。方法createFromPdu期望第一個字節是編碼的服務中心地址的大小(getSubmitPdu上的scAddress參數)。可能你可以通過預先編碼的scAddress(可從SubmitPdu類獲得)並丟棄第一個字節,但看到下一個問題來修復此問題。

其次,它省略了應該在目的地址和消息體之間編碼的時間戳(6個字節)。方法createFromPdu unconditionaly試圖解析時間戳。

此時我正在考慮在SMSLib(http://code.google.com/p/smslib/)中使用PduUtils來創建Pdu。