網上搜了一大堆關於PDU解析的文章,沒啥頭緒,最後還是在參考了Google的代碼後,有了些進展。
由於Sodino未擷取到正規的MMS規範,一切來自Google搜尋,期盼廣大網友挑錯糾正,不勝感激。
手機接收簡訊後,Android(Android 2.2.1 From CyanogenMod For G6)在LogCat中會這樣一個輸出:
12-17 16:24:16.425: DEBUG/WAP PUSH(230): Rx: ae06246170706c69636174696f6e2f766e642e7761702e6d6d732d6d65737361676500b487af84[data:8c82985251594278686467766b2b41008d9083687474703a2f2f3231312e3133362e3232312e37352f5251594278686467766b2b41008805810302a300891780]3133353935373330313133[tag1:2f545950453d504c4d4e00]8a808e020d0c
註:“[data:]”"[tag1]"是人為加上去的。
Android中的MMS工具類都被"@hide"了,但還是可以註冊BroadcastReceiver來接收到:"[data]"中的資料。
從Intent中擷取到MMS的位元據的。擷取方法為:
byte[]data = intent.getByteArrayExtra("data");
好了,先說下解析位元據後能獲得到什麼資訊吧,揀幾條重要的說:
1.CONTENT_LOCATION,即。
2.來訊號碼。
3.多媒體訊息大小。
解析詳情如下:
ae 06 246170706c69 63617469 6f6e2f 766e642e7761702e6d6d732d6d65737361676500 b4 87 af 84<br />ae:Transaction ID/PUSH ID(有一不明,該處Transaction ID與data中資料的Transaction ID有何不同嗎?)<br />06:類型,說明PDU的類型和功能,Push訊息的編碼為0x06。<br />24:長度,即往後36位元組,至af84結束(與文檔有出入,文檔中描述為22即34位元組,不包含af84)。<br />6170706c696f6e2f766e642e7761702e6d6d732d6d65737361676500:applicon/vnd.wap.mms-message(此處少了表示"ati"三字元的三位元組,未明原因,正常的位元組碼順序應是:6170706C69636174696F6E2F766E642E7761702E6D6D732D6D65737361676500,"application/vnd.wap.mms-message")<br />b487:此處反而多出了兩位元組,Sodino不明其意,盼指教。<br />af:頭部資訊“X-Wap-Application-Id”的WSP壓縮編碼。<br />84:X-Wap-Application-Id的值,表示“x-wap-application:mms.ua”。<br />data:<br />[8c 82 98 5251594278686467766b2b4100 8d 90 83<br />687474703a2f2f3231312e3133362e3232312e37352f5251594278686467766b2b4100<br />88 05810302a300<br />891780]<br />8c:X-Mms-Message-Type<br />82:MESSAGE_TYPE_NOTIFICATION_IND(參考自mmssms.db/pdu "ct_l" 賦值為130即十六進位的0x82 及 AOSP com/google/android/mms/pdu/PduHeader)<br />98:X-Mms-Transaction-ID<br />5251594278686467766b2b4100:RQYBxhdgvk+A (tr_id,即Transaction-ID 參考自mmssms.db/pdu)<br />8d:X-Mms-Version<br />90:MMS Version值為1.0(來自網文,參考mmssms.db/pdu "v"值為16即((1 << 4) | 0),該值的名稱為:MMS_VERSION_1_0)<br />83:CONTENT_LOCATION(參考自mmssms.db/pdu "ct_l"及AOSP com/google/android/mms/pdu/PduHeader)<br />687474703a2f2f3231312e3133362e3232312e37352f5251594278686467766b2b4100:http://211.136.221.75/RQYBxhdgvk+A(00:Null 字元)<br />88:EXPIRY<br />05:值的長度,即5位元組<br />81:表示後面的時間採用“相對時間格式”<br />03:表示時間值為3個位元組<br />02a300:172800秒,即48小時的有效期間,與“資訊”應用的提示相符。<br />89:FROM<br />17:"FROM"的長度,即23位元組<br />80:FROM_ADDRESS_PRESENT_TOKEN,第1個位元組<br />3133353935373330313133:13595730113,第2~12個位元組<br />2f545950453d504c4d4e00:/TYPE=PLMN<00> (<00>表示未有明顯的意義,保留原樣),第13~23個位元組<br />8a:MESSAGE_CLASS<br />80:MESSAGE_CLASS_PERSONAL(參考自:mmssms.db/pdu "m_cls"值為personal)<br />8e:MESSAGE_SIZE<br />02:往後讀兩位元組<br />0d0c:(一個long轉化為byte[]後保留的最簡形式,真實值應為3340)
重要的參考文檔:[電信]MMSC(多媒體訊息中心)測試平台的建立.doc
本文內容歸CSDN部落格博主Sodino 所有
轉載請註明出處:http://blog.csdn.net/sodino/archive/2010/12/19/6084697.aspx