复代码代码如下:
import java.util.ArrayList;
java.util.List 가져오기;
org.apache.log4j.Logger 가져오기;
org.smslib.ICallNotification 가져오기;
org.smslib.IInboundMessageNotification 가져오기;
org.smslib.IOutboundMessageNotification 가져오기;
org.smslib.InboundMessage 가져오기;
org.smslib.InboundMessage.MessageClasses 가져오기;
org.smslib.Library 가져오기;
org.smslib.Message.MessageEncodings 가져오기;
org.smslib.Message.MessageTypes 가져오기;
org.smslib.OutboundMessage 가져오기;
org.smslib.Service 가져오기;
org.smslib.modem.SerialModemGateway 가져오기;
/**
* @저자 테리
*
*/
공개 클래스 SmsModem {
// 短信网关
개인 SerialModemGateway 게이트웨이 = null;
java.util.ResourceBundle rb = null;//ResourceBundle.getBundle("SMS");
정적 SmsModem smsModem = null;
OutboundNotification outboundNotification = 새로운 OutboundNotification();
개인 정적 최종 로거 LOG = Logger.getLogger(SmsModem.class);
서비스 서비스;
InboundNotification inboundNotification = 새로운 InboundNotification();
// 수신 음성 통화에 대한 알림 콜백 메서드를 만듭니다.
CallNotification callNotification = 새로운 CallNotification();
공개 SmsModem() {
노력하다 {
//ReadMessages rm = 새로운 ReadMessages();
//rm.doIt();
rb = ResourceBundle.getBundle("sms");
문자열 포트 이름= "COM10";
int 포트 = 9600;
LOG.info("기본 포트 이름:" + 포트 이름);
LOG.info("기본 포트:" + 포트);
if(rb != 널)
{
LOG.info("RB는 null이 아닙니다.");
if(rb.getString("smsport") != null && !"".equals(rb.getString("smsport")))
{
portName = rb.getString("smsport");
LOG.info("포트이름:" + 포트이름);
}
if(rb.getString("smsbolv") != null && !"".equals(rb.getString("smsbolv")))
{
port = Integer.valueOf(rb.getString("smsbolv"));
LOG.info("포트:" + 포트);
}
}
//初始化短信网关
게이트웨이 = new SerialModemGateway("modem." + portName, portName, port,
"웨이브컴", "17254");
} 잡기(예외 e) {
LOG.error("网关初始化失败:" + e.getMessage());
e.printStackTrace();
}
}
공개 정적 SmsModem getInstant() {
if (smsModem == null) {
smsModem = 새로운 SmsModem();
}
smsModem을 반환;
}
공개 SerialModemGateway getGateway() {
리턴 게이트웨이;
}
공개 무효 sendMessage(문자열 전화, 문자열 내용)가 예외를 발생시킵니다.
doIt(전화, 콘텐츠);
}
/**
* 发送短信
* @param 전화
* @param 콘텐츠
* @throws 예외
*/
public void doIt(String Phone, String content)에서 예외가 발생합니다.
아웃바운드메시지 메시지;
LOG.info("보낸 예: 직렬 GSM 모뎀에서 메시지를 보냅니다.");
LOG.info(Library.getLibraryDescription());
LOG.info("보낸 버전: " + Library.getLibraryVersion());
if (srv == null) {
srv = 새로운 서비스();
srv.S.SERIAL_POLLING = 사실;
Gateway.setInbound(true);
Gateway.setOutbound(true);
Gateway.setSimPin("0000");
Gateway.setOutboundNotification(outboundNotification);
Gateway.setInboundNotification(inboundNotification);
Gateway.setCallNotification(callNotification);
srv.addGateway(게이트웨이);
srv.startService();
}
if (게이트웨이 != null) {
LOG.info("모뎀 정보를 보냈습니다:");
LOG.info("보낸 제조업체: " + Gateway.getManufacturer());
LOG.info("전송된 모델: " + Gateway.getModel());
LOG.info("보낸 일련번호: " + Gateway.getSerialNo());
LOG.info("SIM IMSI 전송: " + Gateway.getImsi());
LOG.info("보낸 신호 수준: " + Gateway.getSignalLevel() + "%");
LOG.info("보낸 배터리 수준: " + Gateway.getBatteryLevel() + "%");
}
// 동기적으로 메시지를 보냅니다.
msg = 새로운 OutboundMessage(전화, 콘텐츠);
msg.setEncoding(MessageEncodings.ENCUCS2);// 这句话是发中文短信必须的
srv.sendMessage(msg);
}
/**
* 发送消息类
* @저자 테리
*
*/
공개 클래스 OutboundNotification은 IOutboundMessageNotification을 구현합니다.
공개 무효 프로세스(String GatewayId, OutboundMessage msg) {
LOG.info("게이트웨이에서 호출된 아웃바운드 처리기를 보냈습니다: " + GatewayId);
LOG.info(msg);
}
}
//接收消息类
공개 문자열 readMessage()
{
StringBuffer sb = new StringBuffer("");
List<InboundMessage> msgList;
// 인바운드 및 상태 보고서에 대한 알림 콜백 메소드 생성
// 메시지.
노력하다
{
System.out.println("읽기 예: 직렬 GSM 모뎀에서 메시지를 읽습니다.");
System.out.println(Library.getLibraryDescription());
System.out.println("버전 읽기: " + Library.getLibraryVersion());
// 새로운 서비스 객체 생성 - 모든 객체와 메인 인터페이스의 상위 객체
// 당신에게.
if (srv == null) {
srv = 새로운 서비스();
srv.S.SERIAL_POLLING = 사실;
Gateway.setInbound(true);
Gateway.setOutbound(true);
Gateway.setSimPin("0000");
Gateway.setOutboundNotification(outboundNotification);
Gateway.setInboundNotification(inboundNotification);
Gateway.setCallNotification(callNotification);
srv.addGateway(게이트웨이);
srv.startService();
}
// 마찬가지로, 다음을 나타내는 게이트웨이 객체를 여러 개 정의할 수 있습니다.
// 다양한 GSM 모뎀을 서비스 객체에 추가하고 모두 제어합니다.
//
// 시작! (즉, 정의된 모든 게이트웨이에 연결)
LOG.info("모뎀 정보 읽기:");
LOG.info("제조업체 읽기: " + Gateway.getManufacturer());
LOG.info("모델 읽기: " + Gateway.getModel());
LOG.info("일련번호 읽기: " + Gateway.getSerialNo());
LOG.info("SIM IMSI 읽기: " + Gateway.getImsi());
LOG.info("읽기 신호 레벨: " + Gateway.getSignalLevel() + "%");
LOG.info("배터리 수준 읽기: " + Gateway.getBatteryLevel() + "%");
// 메시지를 읽습니다. 읽기는 서비스 개체를 통해 수행되며
// 정의된 모든 게이트웨이 객체에 영향을 줍니다. 이는 또한 특정 분야에 더 집중될 수도 있습니다.
// 게이트웨이 - 서비스 메소드 호출에 대한 정보를 보려면 JavaDoc을 찾으십시오.
msgList = new ArrayList<InboundMessage>();
this.srv.readMessages(msgList, MessageClasses.ALL);
정수 숫자 = 1;
(인바운드 메시지 메시지: msgList)
{
sb.append("第" + num + "条; 发件人:"+msg.getOriginator() + ";内容:" + msg.getText() + "/n");
//sb.append(msg.toString() + "/n");
LOG.info("第" + num + "条; 发件人:"+msg.getOriginator() + ";内容:" + msg.getText() + "/n");
숫자++;
LOG.info(msg);
}
// 이제 자세요. 실제 상황을 에뮬레이트하고 알림을 받을 수 있는 기회 제공
// 메시지나 음성통화 수신 시 호출되는 메서드입니다.
//System.out.println("현재 절전 중 - 종료하려면 <enter> 키를 누르세요.");
//System.in.read();
}
잡기 (예외 e)
{
sb.append(e.getMessage());
e.printStackTrace();
}
마지막으로
{
//this.srv.stopService();
}
sb.toString()을 반환합니다.
}
공개 클래스 InboundNotification은 IInboundMessageNotification을 구현합니다.
{
공개 무효 프로세스(String GatewayId, MessageTypes msgType, InboundMessage msg)
{
if (msgType == MessageTypes.INBOUND) System.out.println(">>> 게이트웨이에서 새 인바운드 메시지가 감지됨: " + GatewayId);
else if (msgType == MessageTypes.STATUSREPORT) System.out.println(">>> 게이트웨이에서 새 인바운드 상태 보고 메시지가 감지되었습니다: " + GatewayId);
System.out.println(msg);
노력하다
{
// 도착 시 메시지를 삭제하려면 다음 줄의 주석 처리를 취소하세요.
// srv.deleteMessage(msg);
}
잡기 (예외 e)
{
System.out.println("앗!!! 문제가 발생했습니다...");
e.printStackTrace();
}
}
}
공개 클래스 CallNotification은 ICallNotification을 구현합니다.
{
공개 무효 프로세스(문자열 GatewayId, 문자열 callerId)
{
System.out.println(">>> 게이트웨이에서 새 호출이 감지되었습니다: " + GatewayId + " : " + callerId);
}
}
}