我撰写了如下长短信:
$$$$$...$$$$$#####...#####*****...*****
有160个$
个标志构成我的第一个短信,146个#
标志构成第二个短信& 153 *
个符号构成第3条消息,完全按照我的撰写消息活动。
我通过网络发送这条长短信(由三条短信组成)。
我做了一些小改动 - 在使用SmsManager.divide()
分割长短信后,我追加[1/3]
,[2/3]
& [3/3]
在收件人结束时区分它们。
令我惊讶的是,第一条短信中的一些字符,即“$”,作为接收方端的第二条短信的一部分被接收。 我收到的是:
[1/3]$$$...$$$ [2/3]$$$$$$$####..###### [3/3]****..*****
为什么7 $
个符号从第一个短信转移到最后一个短信?
第二次和第三次短信的其余部分没问题。任何人都可以解释这个原因吗?
这与GSM有关。 CDMA手机的情况会有所不同吗?
答案 0 :(得分:0)
我并不特别了解Android,但我发现这种行为并不令人惊讶:
SmsManager.divideMessage()
将消息分成若干部分,以便可以发送每个部分(即除了最后一部分之外的每个部分都将是最大可能的大小,或者可能接近该部分)。
然后为每个部分添加一些文字,使其更长。因此,您指定的“部件”不再适合单个SMS,并且需要重做分离。
答案 1 :(得分:0)
我没有做任何Android开发,所以不能专门评论你正在使用的功能,但这看起来就像是将消息拆分成多个部分所致。
当发送长短信时,会向每个部分添加一些二进制标题,允许接收电话以正确的顺序将其重新组合在一起。
此用户数据头(UDH)通常为6个字节长(可以是7个),从您的消息中删除6个字节的空间。单个部分通常可以包含160个字符(每个字符7位,140个字节),删除这6个UDH字节,将其减少到153个字符。
在您的3部分消息中,7个字符(6个字节)不再适合您的第一部分,因此Android SMS功能将它们移动到第二部分。
如果您想更详细地了解联网消息的工作原理,请查看我的同事http://www.mediaburst.co.uk/blog/concatenated-sms/撰写的这篇博文。