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

Android中接收到的短信的SMS PDU格式是什么,android,Android,我做了以下步骤 字符串sms_txt=“aaaaaaaa” SubmitPdu smsg=SmsMessage.getSubmitPdu(“+919412354222”,“+91953557716”,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] 字节[]sBuf={1,0,12,-111,25,89,83,117,112,97

我做了以下步骤

  • 字符串sms_txt=“aaaaaaaa”
    SubmitPdu smsg=SmsMessage.getSubmitPdu(“+919412354222”,“+91953557716”,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]

  • 字节[]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数据与
    createfromtpdu
    函数的预期PDU输入之间有什么区别?

    我想在一些单元测试中使用getSubmitPdu,所以我开始调试GSM源代码以找到答案。简而言之,getSubmitPdu充满了问题。它至少做了两件与createFromPdu不兼容的事情(我认为这对于GSM是正确的,因为它可以用于从BroadcastReceiver提供的传入SMS意图创建SMSMS消息)。除了我找到的那两个,我再也没有看得更远

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

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


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

    我想在一些单元测试中使用getSubmitPdu,所以我开始调试GSM源代码以找到答案。简而言之,getSubmitPdu充满了问题。它至少做了两件与createFromPdu不兼容的事情(我认为这对于GSM是正确的,因为它可以用于从BroadcastReceiver提供的传入SMS意图创建SMSMS消息)。除了我找到的那两个,我再也没有看得更远

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

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

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