我用的是smslib-3.3.0b2 版本 和 commons-net-1.4.1 版本。正常的短信 收/发 是没问题的。
但我想实现几个功能,不知道代码怎么实现。
我读取短信的方法是:
List<InboundMessage> msgList;
msgList = new ArrayList<InboundMessage>();
this.srv.readMessages(msgList, MessageClasses.ALL);
for (InboundMessage msg : msgList) {
     Log.info(msg);
}
这样好像是读取SIM卡中未读信息(不怎么确定,我一张卡没有未读信息,显示是0条。换另一张卡,也没有未读信息,但能读出SIM卡中所有信息来)。
问题:1、我想实现只读取未读信息,然后成功读取后就把短信状态设置为已读信息。下次就不要再读取信息了。
2、我不知道要怎么实现监听器(设定多长时间去读取一次短信)。
3、这个平台还要不要用其它框架。
我这个短信平台,主要是用来保存员工每天工作日志的。员工日志发送过来,然后读取信息,保存到数据库中。
请高手帮忙了。。

解决方案 »

  1.   

    兄弟,我也是在做这个。我用的是3.5.0版本的。
    this.srv.readMessages(msgList, MessageClasses.ALL);
    你这句代码读的是全部的短信,MessageClasses.READ 已读短信, MessageClasses.UNREAD 未读短信。问题1:我也发了帖子问了这个,没人回答。
    问题2: 我用3.5.0版本的自带有监听器,应该是实时监听的。
    我们需要实现一个接口来实现回调方法:
    先实现接口:IInboundMessageNotification,
    然后实现方法:void process(AGateway gateway, MessageTypes msgType, InboundMessage msg)。
    从方法可以看出,传入的参数为:网关,短信类型,进站短信。
    这样子,当收到短信的时候这个方法会被自动调用,你就得到短信,就可以做后续处理了,
    不过郁闷的是,我的程序每次都把所有的短信读取出来,在这里求高人解答.....
    如何在回调方法里读取未读短信
    问题3: smslib不依赖其他框架。
      

  2.   

    谢谢楼上的兄弟。。
    MessageClasses.READ 已读短信, MessageClasses.UNREAD 未读短信。
    我试了下,确实是这样的。读取相应的短信。
    那有没有方法是 把读取出来的信息设置成已读信息了(我下次读取未读短信的时候就不会再读取出来了)。
    我问的不是smslib依不依赖其他框架。我是问,我想做一个短信平台,就隔一段时间读取一次短信,隔一段时间发送短信。还要不要用到其它框架。
      

  3.   

    (那有没有方法是 把读取出来的信息设置成已读信息了.)关于这点我也不知道。(我想做一个短信平台,就隔一段时间读取一次短信,隔一段时间发送短信。还要不要用到其它框架。)之前我也发帖问过类似的问题,你可以用timer或者quartz实现定时发送,具体情况你上网查一下。
    但是,如果说隔一段时间读取一次短信的话,smslib本身带有监听器,收到短信自然会读取,就是我上面说的监听器。
      

  4.   

    smslib里面有个smsserver的示例,里面有你想要的,发送可以专门设计一个线程,每隔s读取数据库中的未发送信息,并添加到发送队列,这是异步发送模式,还有同步模式文档上都有。接受有两种方式,一种是通过IInboundMessageNotification,一种是自己写一个线程,前者适用实时接受,后者适用定时接受。
      

  5.   

    今天同问这个问题,被我自己解决了,回复在这里希望可以帮到其他人。
    其实很简单,只需要通过gateway再读取一次消息就可以了。
    假如 未读消息有 InboundMessage img,网关gateway
    那么只需:
     gateway.readMessage(img.getMemLocation(), img.getMemIndex());
    就可以了。