写在前面:全局变量
private static char symbol1 = 13; private static char symbol4 = 'n';拨打电话方法:
public static void sendTel(String toUserNo, Alarm alarm) throws Exception {
//AT命令 ATD + 电话号码
String msg = "ATD" + toUserNo + ";rn";
WkSms.run(msg);
}
发送英文短信:
//英文短信方法让我注释掉了,因为用了中文短信方法
// public static void sendMsg(String toUserNo, Alarm alarm) throws Exception {
// char symbol2 = 34;
ctrl ~z 发送指令
// char symbol3 = 26;
// String desc = "Your Device Is Alarming ,DeviceNo:" + alarm.getDeviceNo();
// if(alarm.getDateEnd() != null){
// desc += ",Service expiration time :" + alarm.getDateEnd();
// }
Sms.sendmsn(toUserNo,Desc);
String msg = "phone=" + toUserNo + ",sms_unicode=" +
"您的设备:" + alarm.getDeviceNo() + "正在报警。" + alarm.getDescription() + ";rn";
// String atCommand = "AT+CMGF=" + 1 + String.valueOf(symbol1);
// WkSms.run(atCommand);
// try {
// atCommand = "AT+CSMP=17,169,0,08" + String.valueOf(symbol1);
// WkSms.run(atCommand);
// atCommand = "AT+CSCS?" + String.valueOf(symbol1);
// WkSms.run(atCommand);
// atCommand = "AT+CSCS="GSM"" + String.valueOf(symbol1)+String.valueOf(symbol4);
// WkSms.run(atCommand);
// atCommand = "AT+CMGS=" + toUserNo
// + symbol1 +"," + desc;
strReturn = myport.sendAT(atCommand);
// atCommand = "AT+CMGS=" + """ + toUserNo + """ + String.valueOf(symbol1);
// WkSms.run(atCommand);
// atCommand = StringUtil.encodeHex(desc.trim())
// + String.valueOf(symbol3) + String.valueOf(symbol1);
// WkSms.run(atCommand);
// } catch (Exception ex) {
// System.out.println("111111111");
// System.out.println(ex.getMessage());
// ex.printStackTrace();
// System.out.println("短信发送失败...");
// }
// }
发送中文短信方法:
(网上找了好多例子,但都不好用包括PUA模板、手机号奇偶位对调、短信内容编码处理等。搞了一天搞出一个可以实现的,手机号和短信内容都直接用unicode编码,代码如下)
public static void sendMsg(String toUserNo, Alarm alarm,String content) throws Exception {
char symbol2 = 34;
// ctrl ~z 发送指令
char symbol3 = 26;
// String desc = "5f53524d8bbe59076e295ea68fc79ad8ff01";
String desc;
if(alarm.getDateEnd() != null){
desc = gbEncoding(alarm.getDescription());
}else {
desc = gbEncoding(content);
}
// Sms.sendmsn(toUserNo,Desc);
// String msg = "phone=" + toUserNo + ",sms_unicode=" +
// "您的设备:" + alarm.getDeviceNo() + "正在报警。" + alarm.getDescription() + ";rn";
String atCommand = "AT+CMGF=" + 1 + String.valueOf(symbol1);
WkSms.run(atCommand);
try {
atCommand = "AT+CSMP=17,169,0,08" + String.valueOf(symbol1);
WkSms.run(atCommand);
atCommand = "AT+CSCS?" + String.valueOf(symbol1);
WkSms.run(atCommand);
atCommand = "AT+CSCS="UCS2"" + String.valueOf(symbol1)+String.valueOf(symbol4);
WkSms.run(atCommand);
atCommand = "AT+CMGS=" + """ + gbEncoding(toUserNo) + """ + String.valueOf(symbol1);
WkSms.run(atCommand);
atCommand = desc + String.valueOf(symbol3) + String.valueOf(symbol1);;
WkSms.run(atCommand);
} catch (Exception ex) {
System.out.println("111111111");
System.out.println(ex.getMessage());
ex.printStackTrace();
System.out.println("短信发送失败...");
}
}
其中:WkSms.run(atCommand);这是根据短信猫的连接方式写的简单的tcp线程,后续根据自己需求进行连接发布指令即可(tcp,串口,webcoket等等)。若有需要可以评论区找我要。
gbEncoding()方法是转unicode编码的方法,这个比较简单唯一要注意的是,转成unicode之后不要带/u



