自从05年后,很少接触研究短信的技术问题了,并且思维上也固定了很多东西,老觉得自己是短信专家了,没想到今天一伙计跟我说手机可以一次发200多字的短信,并且接收方收下来后也是一条短信.这时才明白还有超长短信一说,在03年时对FLASH短信,图片铃声短信,WAPPUSH,OTA短信都有过编码制作.但一直没有去好好通读GSM03.40协议,这协议对特殊短信都做了详细的规定
GSM 03.40规范(TP-06 1999-12-15 7.4.0)中规定了SME对于超长短信的合并处理,当前绝大部分GSM手机都支持超长短信.
超长短信编码:首先把TP_udhi的值设置设置为1,在消息正文中增加协议头,基本上所有特殊短信这样设置它为1
接着在每条超长短信分割而成的短信中增加协议头,协议头分两种,分别是长度为6和长度为7的协议头。格式如下:
6位协议头格式:05 00 03 XX MM NN
byte 1 : 05, 表示剩余协议头的长度
byte 2 : 00, 这个值在GSM 03.40规范9.2.3.24.1中规定,表示随后的这批超长短信的标识位长度为1(格式中的XX值)。
byte 3 : 03, 这个值表示剩下短信标识的长度
byte 4 : XX,这批短信的唯一标志,事实上,SME(手机或者SP)把消息合并完之后,就重新记录,所以这个标志是否唯一并不是很重要。
byte 5 : MM, 这批短信的数量。如果一个超长短信总共5条,这里的值就是5。
byte 6 : NN, 这批短信的数量。如果当前短信是这批短信中的第一条的值是1,第二条的值是2。
例如:05 00 03 39 02 01
7位的协议头格式:06 08 04 XX XX MM NN
byte 1 : 06, 表示剩余协议头的长度
byte 2 : 08, 这个值在GSM 03.40规范9.2.3.24.1中规定,表示随后的这批超长短信的标识位长度为2(格式中的XX值)。
byte 3 : 04, 这个值表示剩下短信标识的长度
byte 4-5 : XX XX,这批短信的唯一标志,事实上,SME(手机或者SP)把消息合并完之后,就重新记录,所以这个标志是否唯一并不是很重要。
byte 6 : MM, 这批短信的数量。如果一个超长短信总共5条,这里的值就是5。
byte 7 : NN, 这批短信的数量。如果当前短信是这批短信中的第一条的值是1,第二条的值是2。
例如:06 08 04 00 39 02 01
因为一般一个BYTE计算超长短信的标志即可,一般编码使用6位协议头
超长短信大大拓展了短信息就70个汉字的应用扩展,像GOOGLE的短信搜索回复,什么乱七八糟的下发把一个事情整成一条下发,不就用户感知就清楚明白多了,用在校讯通上也好的,曾经给GOOGLE网上留过建议,但没人鸟我,谁叫我个草根