我做了以下步骤
String sms_txt =“aaaaaaaaaa”;
SubmitPdu smsg = SmsMessage.getSubmitPdu(“+ 919412354222”,“+ 919535570716”,sms_txt,false);
记下来自smsg的编码消息值 编码消息= [1,0,12,-111,25,89,83,117,112,97,0,0,10,-31,112,56,28,14,-121,-61,-31 ,48]
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
所以我的问题是:
从getSubmitPdu
函数创建的PDU数据与createFromPdu
函数的预期pdu输入之间有什么区别?
答案 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。