短信接收--短信接收的pdu解析

短信pdu解析

1、概论:

对于短信的接收和发送,在传送时都会变成统一标准的16进制码,这里以接收为例,从RIL接收的是一个pud怎么转换成大家都可以认识的字符串了?

2、解析

     RIL中收到new SMS,调用android.telephony.SmsMessage.newFromCMT() decode PDU,结果放入SmsMessage中。android.telephony.SmsMessage.newFromCMT() 根据电话的类型,用com.android.internal.telephony.gsm.SmsMessage或com.android.internal.telephony.cdma.SmsMessage的newFromCMT()真正的实现PDU decode

2.1 解析pdu

对于RIL接收到到的pdu是一串16进制的数串,其含义会在下文中进行描述

0891 683110802105F024 0D91 688102200982F600 08    21800381602423   044F60597D

1)短信中心内容解析

08 代表的是后面8个字节都是短信中心的内容

91代表的类型,91是国际类型,81或者A1表示是国内,如果是91就需要在后面的号码上‘+’

683110802105F0为短信中心号码,+8613010812500

2)pdu第一个字节解析

24 带表的含义,其2进制表示0010 0100

接收的时候这8位分别表示以下含义:

BIT

         7     

        6            

                 5                  

    4     

       3           

2   

         1         

    0       

参数

    RP

UDHI

SRI

-

-

         MMS         

MTI

MTI

发送的时候分别表示一下含义

发送的PDU,典型为11H:

BIT

7             

6                    

5                                    

4           

3                  

2                       

1                   

0             

参数

RP

UDHI

SRR

VPF

VPF

RD

MTI

MTI


MTI 2bit:消息类型,00表示收,01表示发

MMS 1bit:短消息服务中心是否有更多短消息等待移动台。1有,0无。默认为1

SRI 1bit:状态报告标示。0不需要状态返回到移动设备。1需要。默认为0

UDHI 1bit:用户数据头标示。0用户数据没有头信息,1有。一般为0

RP  1bit:是否有回复路径的标示。1有,0没有。一般为0

VPF 2bit:有效期限格式。00 VP不存在;10 VP区存在用一个字节表示,是相对值;01保留;11存在,半个字节表示,绝对值。

RD  1bit:重复信元丢弃。0通知服务中心碰到同源、同目的地、同样的MR(短消息序号)的短消息接受。1抛弃,此时将在短消息提交报告中返回一个适当的FCS值。

SRR 2bit:状态报告要求。

3)发送方地址

 0d 代表后面13,后面的字节数是 2 + (Length + 1) / 2 = 8,后面8个字节是发送发的地址

 91 代表的是目的号码类型

 688102200982F6 :+8618200290286,发送方的地址

4)TP-Protocol-Identifier(TP-PID)

01:TS 23.040 9.2.3.9

5)TP-Data-Coding-Scheme
0000 1000

表示数据编码方法和消息类别。一般为00H默认7位编码,等级号0。UCS2编码0等级为08H,可以传输中文。

7

6

5

4

3    

 2

     1       

0              

编码组

保留

x

x

x

具体如下:

bit7-6 bit5 bit4 bit3-2 bit1-0
00 0:文本未压缩

0:表示bit1,

0保留,

有消息类别;

0   0   默认字母表7bit 0    0     Class0
  1:用GSM标准压缩 1:表示有 0   1    8bit数据 0    1     Class1
      1   0    UCS2编码 1    0     Class2
      1  1     保留 1    1     Class3
        Bit1 Bit0  消息类别
00 0 0 10 00

Class0:短消息直接显示到用户终端

Class1:短消息存储在SIM卡上

Class2:短消息必须存储在SIM卡上,禁止直接传输到中断。

Class3:短消息存贮在用户设备上。

6)时间
短信中心下发的时间戳,这个编码和长度固定
21800381602423
21: 年份,12
80:月,08
03:日,30
81:小时,18
60:分钟,06
12:秒,21
23:时区

7)UserDataHeader – UDH

04 4F60597D

04:UDL用户数据长度,包含用户数据和用户数据头的长度

1、 如果用户用默认7位编码。

1)   如果没有用户数据头,此数字标示7bit的字符个数。

2)   如果有用户数据头,此数字表示包括用户数据头(包含补丁在内)在内的7bit个数。即7bit个数加上头部长度在加1(补丁)

2、 如果用户用8位编码

表示用户数据区的字节数,有数据头信息,包括在内。

3、 如果为UCS2编码,则是用户数据区的字节数

注意:由于前面pdu的第一个字节里面已经标示是否有头,如果有头紧接的一个字节为头的长度,然后剩余的是用户数据的长度

8)UD
4F60597D就是用户数据


你可能感兴趣的:(短信解析)