【问题标题】:How to read SMS from sim in dongle using JAVA如何使用 JAVA 从加密狗中的 SIM 卡读取短信
【发布时间】:2014-11-28 05:11:50
【问题描述】:

我正在使用以下代码从加密狗发送短信。 其发送成功。 现在我想从加密狗读取 SIM 短信或未读短信,所以请谁能告诉我如何阅读

以下是发送短信的代码

import org.smslib.OutboundMessage;
import org.smslib.Service;
import org.smslib.modem.SerialModemGateway; 

...

private  String port = "COM4";          // Modem Port.
private  int bitRate = 9600;            // This is also optional. Leave as it is.
private  String modemName = "ZTE";      // This is optional.
private  String modemPin = "0000";      // Pin code if any have assigned to the modem.
private  String SMSC = "+919822078000"; // Message Center Number ex. Mobitel

...

SerialModemGateway gateway = new SerialModemGateway("", port, 9600, "InterCEL", "");
Service.getInstance().addGateway(gateway);
Service.getInstance().startService();
// System.out.println("center number=" + gateway.getSmscNumber());
gateway.setSmscNumber(SMSC);
gateway.setOutbound(true); 

OutboundMessage o = new OutboundMessage(number, str);
gateway.sendMessage(o);

有一个 InboundMessage 类,它接受三个参数,例如网关、MemoryIndexNumber、SimMemoryLocation,我无法获得,所以它返回 null

InboundMessage n=new InboundMessage()
gateway.readMessage(n);

如果有其他方法可以从加密狗的 SIM 中读取短信。

【问题讨论】:

    标签: java smslib


    【解决方案1】:

    要阅读当前在 SIM 卡内存中的消息,您可以这样做

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

    但是要对传入消息进行实时检测,您需要实现 org.smslib.IInboundMessageNotification

    例如

    import org.smslib.AGateway;
    import org.smslib.IInboundMessageNotification;
    import org.smslib.InboundMessage;
    import org.smslib.Message.MessageTypes;
    
    public class SMSInNotification implements IInboundMessageNotification
    {   
        public void process(AGateway gateway, MessageTypes msgType, InboundMessage msg)
        {
            switch (msgType)
            {
                case INBOUND:
                    System.out.println(">>> New Inbound message detected from " + "+" + msg.getOriginator() + " " + msg.getText());
                    break;
                case STATUSREPORT:
    
                    break;
            }
        }
    }
    

    然后在使用 .startService() 启动服务的行之前运行它们

    gateway.setInbound(true);
    Service.getInstance().setInboundMessageNotification(new SMSInNotification());
    

    您可以在 github 上的文档中阅读更多内容 https://github.com/smslib/smslib-v3/tree/master/doc

    【讨论】:

    • 首先谢谢,现在我可以阅读消息,但通知不起作用再次 。我已经做了以下方法是正确的 SerialModemGateway gateway = new SerialModemGateway("", portname,9600, "InterCEL", "");gateway.setInbound(true); Service.getInstance().setInboundMessageNotification(new SMSInNotification()); Service.getInstance().addGateway(网关); Service.getInstance().startService();
    • 我从我发布的通知类中删除了我自己的处理代码。所以它不会输出任何东西。您自己添加了一些处理代码吗?
    • 我已经更新了我的答案,让我的意思更清楚
    • 我也写了同样的东西,但它在接收短信时没有进入进程功能
    • 请您提高您的 log4j 级别并给我一些日志来查看?日志看起来很冗长,所以我认为它会突出问题。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-10-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-10-29
    • 1970-01-01
    相关资源
    最近更新 更多