package com.mobile.sms;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import com.mobile.pojo.CommonSms;
import com.mobile.utils.Constants;
import com.mobile.utils.HandleFactory;
/***
* 短信猫操作类
* 包括短信猫的打开、关闭、读取等操作
* @author hzy
*
*/
public class Sms {
private CommonSms commonsms;
private static Port port;
private static char symbol1 = 13;
private static String strReturn = "", atCommand = "";
private boolean flag = false;
/**
* 初始化连接串口
*
* @param comName
* 串口名称:COM1 COM2..
*/
public Sms(String comName) {
port = new Port();
System.out.println("正在连接" + comName + "通讯端口...");
if (port.open(comName)) {
System.out.println(comName + "通讯端口已经连接!");
setMessageMode(1);
} else {
System.out.println(comName + "通讯端口连接失败!");
}
}
/**
* 发送短信
* @return boolean
*/
public boolean SendSms() {
if (flag == false) {
System.out.println("***************************************");
System.out.println("COM通讯端口未正常打开!");
System.out.println("***************************************");
return false;
}
// 空格
char symbol2 = 34;
// ctrl~z 发送指令
char symbol3 = 26;
try {
atCommand = "AT+CSMP=17,169,0,08" + String.valueOf(symbol1);
strReturn = port.sendAT(atCommand);
System.out.println(strReturn);
if (strReturn.indexOf("OK", 0) != -1) {
atCommand = "AT+CMGS=" + commonsms.getRecver()
+ String.valueOf(symbol1);
strReturn = port.sendAT(atCommand);
atCommand = StringUtil.encodeHex(commonsms.getSmstext().trim())
+ String.valueOf(symbol3) + String.valueOf(symbol1);
strReturn = port.sendAT(atCommand);
if (strReturn.indexOf("OK") != -1
&& strReturn.indexOf("+CMGS") != -1) {
System.out.println("短信发送成功...");
return true;
}
}
} catch (Exception ex) {
ex.printStackTrace();
System.out.println("***************************************");
System.out.println("短信发送失败...");
System.out.println("***************************************");
return false;
}
System.out.println("***************************************");
System.out.println("短信发送失败...");
System.out.println("***************************************");
return false;
}
/**
* 读取一条短信
*
* @param index
* 短信存储的位置
* @return
*/
public boolean ReadSms(int index) {
if (flag == false) {
System.out.println("***************************************");
System.out.println("System Message: COM通讯端口未正常打开!");
System.out.println("***************************************");
return false;
}
try {
atCommand = "AT+CMGR=" + index;
strReturn = port.sendAT(atCommand);
if (strReturn.indexOf("OK") != -1) {
setCommonsms(StringUtil.analyseSMS(strReturn, index));
System.out.println("短信位置:" + commonsms.getId());
System.out.println("短信状态:" + commonsms.getState());
System.out.println("对方号码:" + commonsms.getSender());
System.out.println("短信内容:" + commonsms.getSmstext());
System.out.println("发送时间:" + commonsms.getDate());
}
} catch (Exception ex) {
ex.printStackTrace();
}
return true;
}
/**
* 根据状态收取短信
* @param state 短信状态
* 已读、未读
* @return
*/
public List ReadSms(String state)
{
List<CommonSms> receiveSmsList = RecvSmsList();
List<CommonSms> retList=new ArrayList<CommonSms>();
if(receiveSmsList==null)
{
System.out.println("短信猫中没有短信");
return null;
}
CommonSms cs = null;
for(int i = 0;i<receiveSmsList.size();i++)
{
cs = (CommonSms)receiveSmsList.get(i);
if(cs.getState().equals(state))
{
retList.add(cs);
}
}
if(retList==null)
{
System.out.println("状态为"+state+"的短信共有0条");
}
else{
System.out.println("状态为"+state+"的短信共有"+retList.size()+"条");
}
return retList;
}
/**
* 读取所有短信
*
* @return CommonSms集合
*/
public List<CommonSms> RecvSmsList() {
if (flag == false) {
System.out.println("***************************************");
System.out.println("System Message: COM通讯端口未正常打开!");
System.out.println("***************************************");
return null;
}
List<CommonSms> listMes = new ArrayList<CommonSms>();
try {
atCommand = "AT+CMGL=\"ALL\"";
strReturn = port.sendAT(atCommand);
listMes = StringUtil.analyseArraySMS(strReturn);
if (listMes != null && listMes.size() > 0) {
System.out.println("***************************************");
System.out.println("System Message: 读取到" + listMes.size()
+ "条回复信息......");
System.out.println("***************************************");
CommonSms cs = null;
for (int i = 0; i < listMes.size(); i++) {
cs = (CommonSms) listMes.get(i);
System.out.println("短信位置:" + cs.getId());
System.out.println("短信状态:" + cs.getState());
System.out.println("对方号码:" + cs.getSender());
System.out.println("短信内容:" + cs.getSmstext());
System.out.println("接收时间:" + cs.getDate());
}
System.out.println("***************************************");
}
} catch (Exception ex) {
ex.printStackTrace();
}
return listMes;
}
/**
* 短信存储状况
* +CPMS:”SM”,11,25, ”SM”,11,25, ”SM”,11,25
* SIM 卡可保存25 条短消息,现有短消息11 条
* @return
*/
public String GetReportSMS() {
if (flag == false) {
System.out.println("***************************************");
System.out.println("System Message: COM通讯端口未正常打开!");
System.out.println("***************************************");
return "";
}
try {
atCommand = "AT+CPMS?";
strReturn = port.sendAT(atCommand);
System.out.println(strReturn);
} catch (Exception ex) {
ex.printStackTrace();
}
return strReturn;
}
/**
* 删除短信
* @param index 短信存储的位置
* @return boolean
*/
public boolean DeleteSMS(int index) {
if (flag == false) {
System.out.println("System Message: COM通讯端口未正常打开!");
return false;
}
try {
System.out.println("System Operate: 正在删除存储位置为" + index
+ "的短信......");
atCommand = "AT+CMGD=" + index;
strReturn = port.sendAT(atCommand);
if (strReturn.indexOf("OK") != -1) {
System.out.println("System Message: 成功删除存储位置为" + index
+ "的短信......");
}
} catch (Exception ex) {
ex.printStackTrace();
}
return true;
}
/**
* 删除短信猫中所有短信
* @return boolean
*/
public boolean DeleteAllSMS()
{
List list=RecvSmsList();
boolean ret=true;
for(int i=0;i<list.size();i++)
{
CommonSms tempcomsms=(CommonSms)list.get(i);
if(!DeleteSMS(tempcomsms.getId()))
{
ret=false;
}
}
return ret;
}
public CommonSms getCommonsms() {
return commonsms;
}
public void setCommonsms(CommonSms commonsms) {
this.commonsms = commonsms;
}
/**
* 设置消息模式
*
* @param op
* 0-pdu 1-text(默认1 文本方式 )
* @return
*/
public boolean setMessageMode(int op) {
try {
atCommand = "AT+CMGF=" + String.valueOf(op)
+ String.valueOf(symbol1);
strReturn = port.sendAT(atCommand);
if (strReturn.indexOf("OK", 0) != -1) {
flag = true;
return true;
}
return false;
} catch (Exception ex) {
ex.printStackTrace();
return false;
}
}
- 1
- 2
前往页