我编写了一个程序来解码CDMA 3GPP2点对点SMS消息。我在互联网上找到的几个CDMA PDU十六进制字符串上对其进行了测试,并且效果很好。但是,当我尝试在Android平台上的所有传入文本消息上实现它时,它总是会失败。
我查看了传入的PDU,它似乎没有遵循我以前所看到的相同模式。谁能解释这个PDU的格式,或者我缺少正确解码该PDU的格式?我是否没有考虑其他标题或字段?
从电话上收到的短信中提取的示例PDU:
000000000000100200000000000000000A36373839313031363734000000000000000000001B000310864D000306120624205611010B104C2CF9F3F5EBD73E7000
我发现并测试了解析器的所有CDMA pdu看起来都更像是:
00000210020207028CE95DCC65800601FC08150003168D3001061024183060800306101004044847
运营商:
Verizon
电话:
Samsung Galaxy S Fascinate
正在运行Android 2.3.3
最佳答案
请参阅$ SDK / sources / android-16 / com / android / internal / telephony / cdma / SmsMessage中的javadoc:
/**
* 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,其前五位显示其为7位编码(0x02)。将剩余的userdata左移5位后,我们得到:
09859f3e7ebd7ae7ce00
--len(septets) 9 septets == 63 bits, so we expect 8 bytes of body
----------------7bit-body
因此,您解码的7位元是“ Bggguuugg”。
关于android - Android上的CDMA PDU解析,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/11182650/