我做了以下步骤


字符串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输入之间有什么区别?

最佳答案

我想在某些单元测试中使用getSubmitPdu,所以我着手通过调试GSM源代码来找到答案。简而言之,getSubmitPdu充满了问题。它至少做两件事与createFromPdu不兼容(我认为这对GSM是正确的,因为它可用于根据BroadcastReceiver提供的传入SMS意图创建SmsMessage)。我没有比找到的两个更进一步。

首先,它尝试将第一个字节用作协议信息。方法createFromPdu期望第一个字节为编码的服务中心地址的大小(getSubmitPdu上的scAddress参数)。可能您可以通过在编码的scAddress(可从SubmitPdu类中获取)前面添加并丢弃第一个字节来解决此问题,但请参阅下一个问题。

其次,它忽略了应位于目标地址和消息正文之间的编码时间戳(6个字节)。方法createFromPdu无条件地尝试解析时间戳。

目前,我正在考虑使用SMSLib(http://code.google.com/p/smslib/)中的PduUtils创建Pdu。

关于android - Android中收到的短信的SMS PDU格式是什么,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/6276824/

10-12 06:31