smslib 通过短信猫读取短信相关问题。请高手请教。。。。

wangxiangbo127 2011-01-10 11:58:38
我用的是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、这个平台还要不要用其它框架。
我这个短信平台,主要是用来保存员工每天工作日志的。员工日志发送过来,然后读取信息,保存到数据库中。
请高手帮忙了。。。。。
...全文
682 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
allIdover 2012-07-18
  • 打赏
  • 举报
回复
今天同问这个问题,被我自己解决了,回复在这里希望可以帮到其他人。
其实很简单,只需要通过gateway再读取一次消息就可以了。
假如 未读消息有 InboundMessage img,网关gateway
那么只需:
gateway.readMessage(img.getMemLocation(), img.getMemIndex());
就可以了。
wssjsf 2011-02-10
  • 打赏
  • 举报
回复
smslib里面有个smsserver的示例,里面有你想要的,发送可以专门设计一个线程,每隔s读取数据库中的未发送信息,并添加到发送队列,这是异步发送模式,还有同步模式文档上都有。接受有两种方式,一种是通过IInboundMessageNotification,一种是自己写一个线程,前者适用实时接受,后者适用定时接受。
xiaoyang_job 2011-01-11
  • 打赏
  • 举报
回复
(那有没有方法是 把读取出来的信息设置成已读信息了.)

关于这点我也不知道。

(我想做一个短信平台,就隔一段时间读取一次短信,隔一段时间发送短信。还要不要用到其它框架。)

之前我也发帖问过类似的问题,你可以用timer或者quartz实现定时发送,具体情况你上网查一下。
但是,如果说隔一段时间读取一次短信的话,smslib本身带有监听器,收到短信自然会读取,就是我上面说的监听器。
wangxiangbo127 2011-01-10
  • 打赏
  • 举报
回复
谢谢楼上的兄弟。。
MessageClasses.READ 已读短信, MessageClasses.UNREAD 未读短信。
我试了下,确实是这样的。读取相应的短信。
那有没有方法是 把读取出来的信息设置成已读信息了(我下次读取未读短信的时候就不会再读取出来了)。
我问的不是smslib依不依赖其他框架。我是问,我想做一个短信平台,就隔一段时间读取一次短信,隔一段时间发送短信。还要不要用到其它框架。
xiaoyang_job 2011-01-10
  • 打赏
  • 举报
回复
兄弟,我也是在做这个。我用的是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不依赖其他框架。
wangxiangbo127 2011-01-10
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 youlovexia 的回复:]
帮不上忙.建议你查百度
[/Quote]
就是百度查不到。。我才这里请教高手呀。。。。
YOULOVEXIA 2011-01-10
  • 打赏
  • 举报
回复
帮不上忙.建议你查百度
wangxiangbo127 2011-01-10
  • 打赏
  • 举报
回复
等待高手解决。。自顶下。。。。
在MyEclipse里 1. slf4j-api-1.5.2.jar slf4j-api-1.5.2-sources.jar slf4j-nop-1.5.2.jar comm.jar smsserver-3.4.1.jar smslib-3.4.1.jar 将上述6个jar包拷贝到lib下 2. 在Windows环境下使用SMSLib编程的时候,我们需要做一下comm的配置: 1. 将win32com.dll放置在%JAVA_HOME%/jre/bin下 2. 将comm.jar放置在%JAVA_HOME%/jre/lib/ext下 3. 将javax.comm.properties放置在%JAVA_HOME%/jar/lib下 再试试SMSLib自带的examples,看看效果。 3. pci接口安装drive 程序测试用例: package examples.modem; import org.smslib.IOutboundMessageNotification; import org.smslib.Library; import org.smslib.OutboundMessage; import org.smslib.Service; import org.smslib.modem.SerialModemGateway; public class SendMessage { public void doIt() throws Exception { Service srv; OutboundMessage msg; OutboundNotification outboundNotification = new OutboundNotification(); System.out.println("Example: Send message from a serial gsm modem."); System.out.println(Library.getLibraryDescription()); System.out.println("Version: " + Library.getLibraryVersion()); srv = new Service(); SerialModemGateway gateway = new SerialModemGateway("modem.com1", "COM1", 57600, "Nokia", "6310i"); gateway.setInbound(true); gateway.setOutbound(true); gateway.setSimPin("0000"); srv.setOutboundNotification(outboundNotification); srv.addGateway(gateway); srv.startService(); System.out.println(); System.out.println("Modem Information:"); System.out.println(" Manufacturer: " + gateway.getManufacturer()); System.out.println(" Model: " + gateway.getModel()); System.out.println(" Serial No: " + gateway.getSerialNo()); System.out.println(" SIM IMSI: " + gateway.getImsi()); System.out.println(" Signal Level: " + gateway.getSignalLevel() + "%"); System.out.println(" Battery Level: " + gateway.getBatteryLevel() + "%"); System.out.println(); // Send a message synchronously. msg = new OutboundMessage("+306948494037", "Hello from SMSLib!"); srv.sendMessage(msg); System.out.println(msg); // Or, send out a WAP SI message. //OutboundWapSIMessage wapMsg = new OutboundWapSIMessage("+306948494037", new URL("https://mail.google.com/"), "Visit GMail now!"); //srv.sendMessage(wapMsg); //System.out.println(wapMsg); // You can also queue some asynchronous messages to see how the callbacks // are called... //msg = new OutboundMessage("+309999999999", "Wrong number!"); //msg.setPriority(OutboundMessage.Priorities.LOW); //srv.queueMessage(msg, gateway.getGatewayId()); //msg = new OutboundMessage("+308888888888", "Wrong number!"); //msg.setPriority(OutboundMessage.Priorities.HIGH); //srv.queueMessage(msg, gateway.getGatewayId()); System.out.println("Now Sleeping - Hit to terminate."); System.in.read(); srv.stopService(); } public class OutboundNotification implements IOutboundMessageNotification { public void process(String gatewayId, OutboundMessage msg) { System.out.println("Outbound handler called from Gateway: " + gatewayId); System.out.println(msg); } } public static void main(String args[]) { SendMessage app = new SendMessage(); try { app.doIt(); } catch (Exception e) { e.printStackTrace(); } } }

62,611

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧