[Android][MMS][PDU]MMS PDU二进制信息解析

网上搜了一大堆关于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 ae:Transaction ID/PUSH ID(有一不明,该处Transaction ID与data中数据的Transaction ID有何不同吗?) 06:类型,说明PDU的类型和功能,Push消息的编码为0x06。 24:长度,即往后36字节,至af84结束(与文档有出入,文档中描述为22即34字节,不包含af84)。 6170706c696f6e2f766e642e7761702e6d6d732d6d65737361676500:applicon/vnd.wap.mms-message(此处少了表示"ati"三字符的三字节,未明原因,正常的字节码顺序应是:6170706C69636174696F6E2F766E642E7761702E6D6D732D6D65737361676500,"application/vnd.wap.mms-message") b487:此处反而多出了两字节,Sodino不明其意,盼指教。 af:头部信息“X-Wap-Application-Id”的WSP压缩编码。 84:X-Wap-Application-Id的值,表示“x-wap-application:mms.ua”。 data: [8c 82 98 5251594278686467766b2b4100 8d 90 83 687474703a2f2f3231312e3133362e3232312e37352f5251594278686467766b2b4100 88 05810302a300 891780] 8c:X-Mms-Message-Type 82:MESSAGE_TYPE_NOTIFICATION_IND(参考自mmssms.db/pdu "ct_l" 赋值为130即十六进制的0x82 及 AOSP com/google/android/mms/pdu/PduHeader) 98:X-Mms-Transaction-ID 5251594278686467766b2b4100:RQYBxhdgvk+A (tr_id,即Transaction-ID 参考自mmssms.db/pdu) 8d:X-Mms-Version 90:MMS Version值为1.0(来自网文,参考mmssms.db/pdu "v"值为16即((1 << 4) | 0),该值的名称为:MMS_VERSION_1_0) 83:CONTENT_LOCATION(参考自mmssms.db/pdu "ct_l"及AOSP com/google/android/mms/pdu/PduHeader) 687474703a2f2f3231312e3133362e3232312e37352f5251594278686467766b2b4100:http://211.136.221.75/RQYBxhdgvk+A(00:空字符) 88:EXPIRY 05:值的长度,即5字节 81:表示后面的时间采用“相对时间格式” 03:表示时间值为3个字节 02a300:172800秒,即48小时的有效期,与“信息”应用的提示相符。 89:FROM 17:"FROM"的长度,即23字节 80:FROM_ADDRESS_PRESENT_TOKEN,第1个字节 3133353935373330313133:13595730113,第2~12个字节 2f545950453d504c4d4e00:/TYPE=PLMN<00> (<00>表示未有明显的意义,保留原样),第13~23个字节 8a:MESSAGE_CLASS 80:MESSAGE_CLASS_PERSONAL(参考自:mmssms.db/pdu "m_cls"值为personal) 8e:MESSAGE_SIZE 02:往后读两字节 0d0c:(一个long转化为byte[]后保留的最简形式,真实值应为3340)

 

 

重要的参考文档:[电信]MMSC(彩信中心)测试平台的建立.doc


本文内容归CSDN博客博主Sodino 所有
转载请注明出处:http://blog.csdn.net/sodino/archive/2010/12/19/6084697.aspx


你可能感兴趣的:(c,android,Google,Class,文档,byte)