最近很多网友来信反馈有关Android中文短信的实现原理,其实了解中文短信应该从最基本的GSM通讯协议开始看起,这里找到了Android平台的短信类库android.telephony.gsm的相关实现看完就可以很好解决。然而平时分送时使用sendMultipartTextMessage方法比较好,该方式可以自动计算文本长度,然后使用divideMessage()方法分段,最终均使用sendTextMessage来发送,但底层的实现都需要经过sendRawPdu方法。
其中实现中文短信的核心就是编码,常规的SMS使用的是7bit的压缩处理方式,然后MMS或Push短信使用的8bit非压缩方式,但发送中文、日文都需要使用16bit的unicodes编码方式,这里需要说明的是这类宽字节的编码仅能存储70个字节,而gsm标准的的7位是压缩的可以存放160个字节内容。标准的8位是256个字符,对应ascii正好够用,最终中文短信使用java内部的utf-16be编码方式,通过getBytes方式直接转换即可,其实Android在实现短信内部上已经实现了正确的ucs2编码,但在调用时使用了一个try和catch先尝试7bit的gsm编码,但发送常规中文短信时并没有失败,造成catch中的ucs2编码方式尚未执行。
如果仍然有疑问可以仍然来函到 android123@163.com
RSS