公司项目中要用到进行收发短信,在网上找到一个开源的jSMSEngine。经测试jSMSEngine
可以实现项目需求。
jSMSEngine开源包可以利用GSMModem或带有红外线、蓝牙、数据线的手机与电脑连通,收发短信。
相应的类库下载我已经打包好了
jSMSEngine开源项目主页
http://sourceforge.net/projects/jsmsengine/
相关类库下载
让我们先来配置开发环境环境。
1. 复制comm.jar、jSMSEngine.jar到jre\lib\ext文件夹下,或把开发包添加到开发环境中。
2. 复制javax.comm.properties到\jre\lib目录下。
3. 复制win32com.dll到\jre\bin目录下。
用如果是用Eclipse开发的话看看Install JRE里面的JRE路径,用那个就可以了。
如果不用开发工具的话jre就是你在系统环境里配置的JAVA_HOME 的路径。
以上工作是必须的,很重要。到这时环境已经准备好了。
在设备管理器下,看看手机占用的哪个com端口,更改程序里面的com端口和比特率两个参数,找一台带数据线的手机试试,最好不带内存卡的那种。
发送短信代码:
import java.util.LinkedList;
import org.jsmsengine.CIncomingMessage;
import org.jsmsengine.CMessage;
import org.jsmsengine.COutgoingMessage;
import org.jsmsengine.CService;
@SuppressWarnings("unchecked")
/****
* 收发短信的服务类
*/
public class MsgService
{
private static CService cs = null;
public static void init(String port, Integer fm)
{
// 指定端口号和频率
cs = new CService(port, fm);
}
/**
* 发送短信
*
* @param phone
* 手机号
* @param info
* 短信内容
*/
public static void sendmsg(String phone, String info)
{
try
{
System.out.println("正在发送短信");
// 初始化连接
cs.initialize();
// 设置jSMSEngine服务的缓存
cs.setCacheDir(".\\");
// 连接
int status = cs.connect();
// 连接成功(可以是GSM Modem、带有红外线、蓝牙、数据线的手机)
if (status == CService.ERR_OK)
{
cs.setOperationMode(CService.MODE_PDU);
cs.setSmscNumber("");
COutgoingMessage msg = new COutgoingMessage(phone, info);
msg.setMessageEncoding(CMessage.MESSAGE_ENCODING_UNICODE);
if (cs.sendMessage(msg) == CService.ERR_OK)
{
System.out.println("给" + phone + "发送短信成功!");
} else
{
System.out.println("给" + phone + "发送短信失败!");
}
// 断开连接
cs.disconnect();
} else
{
System.out.println("连接设备失败, 异常: " + status);
}
} catch (Exception e)
{
e.printStackTrace();
}
}
/***
* 读取短信内容
*/
public static void readmsg()
{
//存入短信集合
LinkedList msgList = new LinkedList();
try
{
System.out.println("读取短信中。。。。");
cs.initialize();
cs.setCacheDir(".\\");
// 连接设备
int status = cs.connect();
if (status == CService.ERR_OK)
{
cs.setOperationMode(CService.MODE_PDU);
if (cs.readMessages(msgList, CIncomingMessage.CLASS_ALL) == CService.ERR_OK)
for (int i = 0; i < msgList.size(); i++)
{
CIncomingMessage msg = (CIncomingMessage) msgList.get(i);
System.out.println(msg);
//输出短信文本
System.out.println(msg.getText());
//删除短信
cs.deleteMessage(i);
}
// 断开连接
cs.disconnect();
} else
System.out.println("设备连接失败:" + status);
} catch (Exception e)
{
e.printStackTrace();
}
}
public static void main(String[] args)
{
init("com4", 9600);
sendmsg("15800000000", "这是一个测试程序");
readmsg();
}
}
ok,测试成功!
项目下载