2012-06-25 139 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」。