2016-12-27 59 views
1

我尝试这一点,但它有些时候不能正常工作..我用循环代码循环。我可以为此添加一些列表程序吗?任何人都可以给我这个正确的答案?在需要获得性反应的实时短信没有收到与Java smslib库

while (true) { 
      msgList = new ArrayList<InboundMessage>(); 
      Service.getInstance().readMessages(msgList, InboundMessage.MessageClasses.ALL); 
      for (InboundMessage im : msgList) { 

       if (last < im.getMemIndex()) { 
        ResultSet rs = DB.getConnection().createStatement().executeQuery("Select * From codes where code='" + im.getText() + "'"); 
        if (rs.next()) { 
         ResultSet rs2 = DB.getConnection().createStatement().executeQuery("Select * From sms_log where code='" + im.getText() + "' AND tel_no='" + im.getOriginator() + "'"); 
         if (rs2.next()) { 
           if (m == null) { 
            m = new SMSClient(1); 
           } 
           m.sendMessage(im.getOriginator(), "The Code is Already Sent... Thank You!."); 

          System.out.println("The Code is Already Sent... Thank You!."); 
         } else { 
          System.out.println("The Code Verified... Thank You!."); 
          if (m == null) { 
           m = new SMSClient(1); 
          } 

          m.sendMessage(im.getOriginator(), "The Code Verified... Thank You!."); 
          DB.getConnection().createStatement().execute("INSERT INTO sms_log (tel_no,code,status) values('" + im.getOriginator() + "','" + im.getText() + "',1)"); 

         } 
        } else { 
         if (m == null) { 
          m = new SMSClient(1); 
         } 
         m.sendMessage(im.getOriginator(), "Invalid Code... Thank You!."); 
         System.out.println("Invalid Code... Thank You!."); 
        } 

       } 
      } 
      Thread.sleep(10000); 
      System.out.println("start"); 

     } 

回答

0

我觉得IInboundMessageNotification是您正在寻找

public class InboundNotification implements IInboundMessageNotification { 

    @Override 
    public void process(AGateway aGateway, Message.MessageTypes messageTypes, InboundMessage inboundMessage) { 
    //add you logic for received messages here 
    } 
}

添加通知类smsLib服务

Service.getInstance().setInboundMessageNotification(new InboundNotification())

从现在起,接口过程()方法将在您的调制解调器每次收到消息时被调用。

至于我记得,smslib(版本3.5.x的)不会删除收到的邮件,因此需要,否则需要手动完成

@Override 
public void process(AGateway aGateway, Message.MessageTypes messageTypes, InboundMessage inboundMessage) { 
    try { 
     aGateway.deleteMessage(inboundMessage); 
     } catch (TimeoutException | GatewayException | InterruptedException | IOException e) { 
      e.printStackTrace(); 
     } 
    // your logic here 
}

你能不能让每一次接收未删除的消息收到新一。

希望你会发现这个有用。