2012-06-25 52 views
2

我已经编写了一个解码CDMA 3GPP2点对点SMS消息的程序。我在互联网上找到的一对CDMA PDU十六进制字符串上进行了测试,结果非常完美。但是,当我尝试在Android平台上的所有传入文本消息上实现它时,它总是失败。Android上的CDMA PDU解析

我看了看传入的PDU,它似乎没有遵循我以前看过的相同模式。任何人都可以解释这个PDU的格式是什么,或者我错过了什么来正确解码这个PDU?有没有额外的标题或字段我没有考虑到?

例PDU从进入短信把我的手机上:

000000000000100200000000000000000A36373839313031363734000000000000000000001B000310864D000306120624205611010B104C2CF9F3F5EBD73E7000 

所有CDMA的PDU,我发现和测试了我的分析器上看起来更像是:

00000210020207028CE95DCC65800601FC08150003168D3001061024183060800306101004044847 

载体:Verizon 电话:Samsung Galaxy S Fascinate正在运行Android 2.3.3

回答

2

请参阅$ SDK/sources/android-16/com /中的javadoc和roid/internal/telephony/cdma/SmsMessage:

/** 
* Creates byte array (pseudo pdu) from SMS object. 
* Note: Do not call this method more than once per object! 
*/ 

......所以它没有遵循任何特定的CDMA标准。你可以解码它;所以罚款ASCII艺术: -

000000000000100200000000000000000A36373839313031363734000000000000000000001B000310864D000306120624205611010B104C2CF9F3F5EBD73E7000 
--------messageType  --digitMode     --------bearerReply ------------------------------------------------------bearer data 
     --------teleService --ton --------------------src  --replySeqNo --messageID --msts   --userdata 
       --------serviceCategory       --errorClass --len --XX--len   --len 
          --numberMode       --causeCode ------  ------------2012/06/24 20:56:11 
           --npi         --------bearerDataLength    ----------------------userdata 
           --len           

请注意,我认为你做你的消息的剪切/粘贴错误 - 00字节的标有“XX”,我认为不应该有 - 幸运的是,它很容易被发现的日期和工作倒退。因此,这是来自6789101674用户数据的消息:

104C2CF9F3F5EBD73E7000,其前5位表示它是7位编码的(0x02)。已移至了用户数据的5位左边的部分,我们就只剩下:

09859f3e7ebd7ae7ce00 
--len(septets) 9 septets == 63 bits, so we expect 8 bytes of body 
    ----------------7bit-body 

所以,你的7位体解码是“Bggguuugg”。