发送长短信(2006-04-21 18:25:51)转载
/**
*
* @param destMobile
* @param msg
* @param smsId
* @return
* @throws UnsupportedEncodingException
*/
public static boolean sendSMS(String destMobile, String msg, String smsId) throws UnsupportedEncodingException
{
int tp_Udhi = 0; //UDHI为0表示普通短信,1表示长短信
ArrayList contentList = new ArrayList();
byte[] msg_Content = msg.getBytes("UnicodeBigUnmarked");
int msgContentLen = msg_Content.length; //短信内容长度
//如果短信内容长度超过2680,不发送,不能无限制的长
if(msgContentLen > 2680)
{
LogConfig.logger.error("短信内容大于1340个字符,一次最多拆分为20条短信");
return false;
}
//将短信内容拆分
if(msgContentLen > 140) //如果一条短信的长度大于140,要拆分
{
tp_Udhi = 1; //UDHI为0表示普通短信,1表示长短信
if(longSMSNumTag == 127) //因为该参数取值范围为1至127之间
{
longSMSNumTag = 0;
}
longSMSNumTag++; //如果有几条长短信同时发送时,为了不互相混合,用一个数量标志来区分
try
{
int looplen = 0;
if(msgContentLen % 134 == 0) //如果能整除
{
looplen = msgContentLen / 134;
}
else //取整加1
{
looplen = msgContentLen / 134 + 1;
}
for (int i = 0; i < looplen; i++)
{
byte[] split_msg_content = new byte[134];
byte[] temp = new byte[140];
if (i == looplen - 1) //当拆分到最后一条短信时,此时应取剩下的,而不是134位长
{
int lastLength = msgContentLen - i * 134;
byte[] split_msg_content2 = new byte[lastLength];
byte[] temp2 = new byte[lastLength+6];
System.arraycopy(msg_Content, i * 134,
split_msg_content2, 0,
msgContentLen - i * 134);
//说明:当发送长短信时,按移动的规范,要设定短信内容UD字段的值,即设定如下六个字节的内容,才能实现长短信的发送和合并功能
//UD = UDHL(1字节) + UDH(5字节)
//UDH = IEI(1字节) + IEIDL(1字节) + IED(3字节)
temp2[0] = 0x05; //第一个byte(UDHL)固定取值05,表示IED字段长为三个字节,IEIDL和IEI字段分别为一个字节长
temp2[1] = 0x00; //第二个byte(IEI)固定取值00,表示该短信为超长短信拆分后的子短信
temp2[2] = 0x03; //第三个byte(IEIDL)固定取值03,表示IED字段长为三个字节
temp2[3] = intToByte(longSMSNumTag); //第四个byte表示本条长短信的标识,用于在接收端区别不同的长短信,防止合并不同长短信
temp2[4] = intToByte(looplen); //第五个byte为本条长短信一共分为几条
temp2[5] = intToByte(i+1); //第六个byte为当前这条短信是长短信中的第几条
for(int j=6;j<split_msg_content2.length+6;j++)
{
temp2[j] = split_msg_content2[j-6];
}
contentList.add(temp2);
}
else
{
System.arraycopy(msg_Content, i * 134,split_msg_content, 0, 134);
//说明:当发送长短信时,按移动的规范,要设定短信内容UD字段的值,即设定如下六个字节的内容,才能实现长短信的发送和合并功能
//UD = UDHL(1字节) + UDH(5字节)
//UDH = IEI(1字节) + IEIDL(1字节) + IED(3字节)
temp[0] = 0x05; //第一个byte(UDHL)固定取值05,表示IED字段长为三个字节,IEIDL和IEI字段分别为一个字节长
temp[1] = 0x00; //第二个byte(IEI)固定取值00,表示该短信为超长短信拆分后的子短信
temp[2] = 0x03; //第三个byte(IEIDL)固定取值03,表示IED字段长为三个字节
temp[3] = intToByte(longSMSNumTag); //第四个byte表示本条长短信的标识,用于在接收端区别不同的长短信,防止合并不同长短信
temp[4] = intToByte(looplen); //第五个byte为本条长短信一共分为几条
temp[5] = intToByte(i+1); //第六个byte为当前这条短信是长短信中的第几条
for(int k=6;k<split_msg_content.length+6;k++)
{
temp[k] = split_msg_content[k-6];
}
contentList.add(temp);
}
}
}
catch(Exception e)
{
LogConfig.logger.error("短信出现异常: " + e);
return false;
}
}
else //是普通短信,不需拆分
{
tp_Udhi = 0; //UDHI为0表示普通短信,1表示长短信
contentList.add(msg_Content);
}
return send(destMobile,contentList,tp_Udhi);
}
Java_send_letter_sample_length.rar_长短信
版权申诉
62 浏览量
2022-09-19
16:41:15
上传
评论
收藏 2KB RAR 举报
林当时
- 粉丝: 100
- 资源: 1万+
最新资源
- 基于python开发使用深度学习去预测股票后续的价格+源码+文档(毕业设计&课程设计&项目开发)
- flowable-designer-5.22.0.zip
- threadmanager.cpp
- 腾讯云小程序 - 一站式开发与部署平台
- 基于JSP+Java+Servlet采用MVC模式开发的购物网站+源码(毕业设计&课程设计&项目开发)
- fastgestures安装包,模拟mac的触控板收拾,两指代表右击, 三指拖拽
- 基于组态王的升降式横移立体车库控制系统+源码(毕业设计&课程设计&项目开发)
- 基于python+Django和协同过滤算法的电影推荐系统+源码(毕业设计&课程设计&项目开发)
- 环境配置 vscode+jupyter
- 项目全部代码,还包含使用到的图片
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈