CDMA短信modem开发总结

转载请注明原文地址:http://sailingsky.iteye.com/blog/1816579 :wink:

本文并不是完整的从头到尾介绍怎么用java通过短信modem发送短信,只是侧重讲解决短信modem中文发送短信的问题。
首先,由于短信modem型号的不同,你所采用的AT命令的格式以及解决中文短信乱码的方案也不同。
1.Anydata 即西门子的短信modem

//AT+CMGF=1命令将设置短信格式设置为text
tmp = "AT+CMGF=1\r\n";
//writeContent方法就是将命令或内容通过串口写入短信modem的方法
if (writeContent(tmp, rt) != 1) {
return -1;
}
// “AT+CMGS=msgid,number,callback-number,option,data”
//Msgid是用户指定的消息代号
//Number是短消息的目的地号码
//Callback-number是用户填写的回叫号码
//Option: 这个参数是几个选项的组合
//bit 0-1:coding
//0: ascii,原文;
//1: ascii, HEX格式化
//3: Unicode, HEX格式化;
//2: OCTET,HEX格式化
tmp = "AT+CMGS=2,"+mobile+",,3,"+stringToUnicode(message)+"\r\n";
if (writeContent(tmp, rt) == 1) {
return 0;
}

中文肯定是先用转换成unicode码字符串才能发送,不然会是乱码

/*
* 将字符串转化为unicode码字符串
*/
public String stringToUnicode(String s) {
String str = "";
for (int i = 0; i < s.length(); i++) {
int ch = (int) s.charAt(i);
if (ch > 255)
str += Integer.toHexString(ch) ;
else
str +="00" + Integer.toHexString(ch);
}
return str;
}


2.wavecom 短信modem


//AT+CMGF=1同样是将短信模式设置为text模式
tmp = "AT+CMGF=1\r\n";
if (writeContent(tmp, rt) != 1) {
return -1;
}

//Command syntax: AT+CMGS=<da> [,<length>] [,<priority>] [,<privacy>] [,<reply>]
//[,<cbn>] <cr><messagetext> [<term>]
tmp = "AT+CMGS=\"" +mobile+"\","+message.getBytes("UNICODE").length+"\r";
//这是先写命令的前半部分
writeContent(tmp, rt);
//这是写后半部分,也就是写短信内容
if(writeCNContent(message,rt,(char)-1)==1){
return 0;
};



/**
*写中文短信内容
**/
public int writeCNContent(String content, Rxtx rt, char last) {

try {
//将短信内容转码成unicode的byte数组
byte[] b = content.getBytes("UNICODE");
char[] carr = new char[170];

rt.writeData(b, 0, b.length);
Thread.sleep(500);
//b2是ctrl+z命令的byte数组形式
byte[] b2 = new byte[] { 0x00, 0x1a };
rt.writeData(b2, 0, b2.length);
int ret = rt.read(carr, 170, 2000);
if (ret == 0) {
debug.error(" command read failed");

rt.closeConnection();
return 0;
}
//解析从短信modem返回回来的结果信息
String t = parseByte(carr);
if ((!(t.indexOf("OK") > -1)) && (!(t.indexOf(">") > -1))) {
}

} catch (Exception ce) {
ce.printStackTrace();
return 0;
}
return 1;

}
  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值