android - Android 上的 CDMA PDU 解析

标签 android sms cdma pdu

我编写了一个程序来解码 CDMA 3GPP2 点对点 SMS 消息。我在互联网上找到的几个 CDMA PDU 十六进制字符串上对其进行了测试,效果非常好。然而,当我尝试在 Android 平台上的所有传入短信上实现它时,它总是失败。

我查看了传入的 PDU,它似乎不符合我习惯看到的模式。谁能解释一下这个 PDU 的格式,或者我缺少什么来正确解码这个 PDU?是否有其他我没有考虑到的 header 或字段?

从我手机上收到的短信中提取的 PDU 示例:

000000000000100200000000000000000A36373839313031363734000000000000000000001B000310864D000306120624205611010B104C2CF9F3F5EBD73E7000

我发现并测试我的解析器的所有 CDMA pdu 看起来都更像:

00000210020207028CE95DCC65800601FC08150003168D3001061024183060800306101004044847

运营商:Verizon 手机:运行 Android 2.3.3

Samsung Galaxy S Fascinate

最佳答案

请参阅 $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                                           

请注意,我认为您在消息中犯了剪切/粘贴错误 - 标记为“XX”的 00 字节我认为不应该在那里 - 幸运的是,很容易找到日期并向后工作。这是一条来自 6789101674 的消息,其中包含用户数据:

104C2CF9F3F5EBD73E7000,前五位表明它是7位编码的(0x02)。将用户数据的剩余部分向左移动 5 位后,我们得到:

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

所以你的 7bit-body 解码后是“Bggguuugg”。

关于android - Android 上的 CDMA PDU 解析,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11182650/

相关文章:

android - vitamio是否支持加密HLS推流

android - 如何将我的 Android 应用程序与 SL4A 集成?

java - 如何在TimePickerDialog中显示额外1小时

java - 在 Android XML 中对齐 TextView 和进度条

java - 通过 Java 开始 SMS 编程需要哪些资源?

iphone - 确定设备是否可以同时调用和传输数据

android - CDMA 设备的信号强度范围(以 dbm 为单位)

android - 没有 SMS 内容提供程序的任何 Android 手机?

java - 如何从我的应用程序向另一台 Android 设备发送短信

android - 如何在没有互联网连接的情况下与服务器通信?