您的位置:首页 > 移动开发 > Android开发

android发送短信代码(短信内容超长处理)

2014-11-11 15:22 375 查看
一条短信只可容纳70个中文,所以当短信长度超过70个中文字符时程序就要特殊处理了。

有两种方式:

1.通过sendTextMessage()方法依次发送拆分后的短信,该方式有个弊端就是用户会分条收到短信。

if (message.length() > 70) {
ArrayList<String> msgs = sms.divideMessage(message);
for (String msg : msgs) {
sms.sendTextMessage(phoneNumber, null, msg, sentPI, deliverPI);
}
}else {
sms.sendTextMessage(phoneNumber, null, message, sentPI, deliverPI);
}

2.通过sendMultipartTextMessage()方法发送超长短信,这种方式还是发送多条短信,但用户收到的短信会是连在一起的一整条。

if (message.length() > 70) {
ArrayList<String> msgs = sms.divideMessage(message);
ArrayList<PendingIntent> sentIntents = new ArrayList<PendingIntent>();
for(int i = 0;i<msgs.size();i++){
sentIntents.add(sentPI);
}
sms.sendMultipartTextMessage(phoneNumber, null, msgs, sentIntents, null);
} else {
sms.sendTextMessage(phoneNumber, null, message, sentPI, deliverPI);
}

【原文:http://www.cnblogs.com/android100/p/android-send-msg.html】

============================================================================

android长短信收发

长短信格式 :

超长短信:短信内容超过70个汉字,提交给网关时候需要分成多条,但是用户手机接收时候是一条(sp角度,手机发送长短信概念一样)。

在cmpp协议里,CMPP-_SUBMIT消息定义中有相应的参数配置:

TP_udhi :0代表内容体里不含有协议头信息 1代表内容含有协议头信息(长短信,push短信等都是在内容体上含有头内容的)当设置内容体包含协议头,需要根据协议写入相应的信息,长短信协议头有两种:

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

到此,长短信的发送设置基本完成.

长短信是有规约的,协议头部分如果是0x40以下,则说明是普通短信,如果是0x40以上,则是长短信,然后在短信内容部分,有六个字节分别定义短信唯一标识以及该短信是第几条,所以长短信发送时每条实际为67个汉字。手机接收到之后,都会按照标准规约自动组合为一条短信,而不是显示多条。

长短信的接收:

长短信会分割成多条发送过来,每一条头部会带上总共有多少条,和这是第几条。手机收到其中一条短信时,如果辨别出是长短信,则先把短信存储在raw表内(sqlite路径:/data/data/com.android.providers.telephony/databases/mmssms.db),当收完全部短信时,就把raw表的相关内容删除,传播到其他程序处理。主要在SMSDispatcher.java的processMessagePart函数中进行处理。

长短信的发送:

利用SmsManager的


public void sendMultipartTextMessage (String destinationAddress, String scAddress,ArrayList<String>
parts, ArrayList<PendingIntent>
sentIntents, ArrayList<PendingIntent>
deliveryIntents)

其中的 ArrayList<String>
parts是长短信分割成的部分短信内容,并把它们封装在一个arraylist容器里。

【原文:/article/7956438.html】

其它文章参考:

1、http://blog.chinaunix.net/uid-25422700-id-368672.html 实现 Android 发短信功能
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: