什么是Android PDU中接收短信的SMS PDU格式

时间:2011-06-08 09:41:53

标签: android

我做了以下步骤

  1. String sms_txt =“aaaaaaaaaa”;
    SubmitPdu smsg = SmsMessage.getSubmitPdu(“+ 919412354222”,“+ 919535570716”,sms_txt,false);

  2. 记下来自smsg的编码消息值 编码消息= [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);

  4. 我正在mWrappedSmsMessage = NULL

    所以我的问题是: 从getSubmitPdu函数创建的PDU数据与createFromPdu函数的预期pdu输入之间有什么区别?

1 个答案:

答案 0 :(得分:1)

我想在一些单元测试中使用getSubmitPdu,所以我开始通过调试GSM源代码找到答案。简而言之,getSubmitPdu充满了问题。它至少有两件与createFromPdu不兼容的东西(我认为它对GSM是正确的,因为它可以用来从BroadcastReceiver提供的传入SMS意图创建一个SmsMessage)。我没有看到我发现的两个。

首先,它尝试使用第一个字节作为协议信息。方法createFromPdu要求第一个字节是编码的服务中心地址的大小(getSubmitPdu上的scAddress param)。可能你可以通过预先编码scAddress(可从SubmitPdu类获得)并丢弃第一个字节但看到下一个问题来修复它。

其次,它省略了目标地址和消息体之间应该存在的编码时间戳(6个字节)。方法createFromPdu unconditionaly尝试解析时间戳。

此时我正在考虑在SMSLib(http://code.google.com/p/smslib/)中使用PduUtils来创建Pdu。