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

来源:互联网 发布:苹果mac顿号怎么打 编辑:程序博客网 时间:2024/05/16 06:22

一条短信只可容纳70个中文,所以当短信长度超过70个中文字符时程序就要特殊处理了。

 

有两种方式:

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

 
  1. if (message.length() > 70) {  
  2.     ArrayList<String> msgs = sms.divideMessage(message);  
  3.     for (String msg : msgs) {  
  4.         sms.sendTextMessage(phoneNumber, null, msg, sentPI, deliverPI);  
  5.     }  
  6. }else {  
  7.        sms.sendTextMessage(phoneNumber, null, message, sentPI, deliverPI);  
  8. }  

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

  

  1. if (message.length() > 70) {  
  2.     ArrayList<String> msgs = sms.divideMessage(message);  
  3.     ArrayList<PendingIntent> sentIntents =  new ArrayList<PendingIntent>();  
  4.     for(int i = 0;i<msgs.size();i++){  
  5.        sentIntents.add(sentPI);  
  6.     }  
  7.     sms.sendMultipartTextMessage(phoneNumber, null, msgs, sentIntents, null);  
  8. else {  
  9.      sms.sendTextMessage(phoneNumber, null, message, sentPI, deliverPI);  
  10. }  


【原文: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容器里。




【原文:http://blog.csdn.net/lizzy115/article/details/22998001】


其它文章参考:

1、http://blog.chinaunix.net/uid-25422700-id-368672.html   实现 Android 发短信功能 

0 0
原创粉丝点击