gpt4 book ai didi

java - SMSLib 不接收短信 [java 版]

转载 作者:行者123 更新时间:2023-11-29 09:11:13 26 4
gpt4 key购买 nike

我正在尝试将我的手机用作 GSM 调制解调器。我使用 SMSLib 通过此调制解调器发送和接收 SMS。问题是,当我的手机(GSM 调制解调器)收到一条短信时,我没有使用 SMSLib 进行通知。但是代码总体上很好,例如当 GSM 调制解调器接到电话时通知我。我的代码没有任何错误,因为我只使用 SMSLib 示例代码来接收消息。SMSLib 示例代码是:

public class TestSinaRec
{
public void doIt() throws Exception
{
// Define a list which will hold the read messages.
List<InboundMessage> msgList;
// Create the notification callback method for inbound & status report
// messages.
InboundNotification inboundNotification = new InboundNotification();
// Create the notification callback method for inbound voice calls.
CallNotification callNotification = new CallNotification();
//Create the notification callback method for gateway statuses.
GatewayStatusNotification statusNotification = new GatewayStatusNotification();
OrphanedMessageNotification orphanedMessageNotification = new OrphanedMessageNotification();
try
{
System.out.println("Example: Read messages from a serial gsm modem.");
System.out.println(Library.getLibraryDescription());
System.out.println("Version: " + Library.getLibraryVersion());
// Create the Gateway representing the serial GSM modem.
SerialModemGateway gateway = new SerialModemGateway("modem.com4", "COM4", 115200, "Nokia", " 6303i");
// Set the modem protocol to PDU (alternative is TEXT). PDU is the default, anyway...
gateway.setProtocol(Protocols.PDU);
// Do we want the Gateway to be used for Inbound messages?
gateway.setInbound(true);
// Do we want the Gateway to be used for Outbound messages?
gateway.setOutbound(true);
// Let SMSLib know which is the SIM PIN.
gateway.setSimPin("0444");
// Set up the notification methods.
Service.getInstance().setInboundMessageNotification(inboundNotification);
Service.getInstance().setCallNotification(callNotification);
Service.getInstance().setGatewayStatusNotification(statusNotification);
Service.getInstance().setOrphanedMessageNotification(orphanedMessageNotification);
// Add the Gateway to the Service object.
Service.getInstance().addGateway(gateway);
// Similarly, you may define as many Gateway objects, representing
// various GSM modems, add them in the Service object and control all of them.
// Start! (i.e. connect to all defined Gateways)
Service.getInstance().startService();
// Printout some general information about the modem.
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() + " dBm");
System.out.println(" Battery Level: " + gateway.getBatteryLevel() + "%");
System.out.println();
// In case you work with encrypted messages, its a good time to declare your keys.
// Create a new AES Key with a known key value.
// Register it in KeyManager in order to keep it active. SMSLib will then automatically
// encrypt / decrypt all messages send to / received from this number.
//Service.getInstance().getKeyManager().registerKey("+306948494037", new AESKey(new SecretKeySpec("0011223344556677".getBytes(), "AES")));
// Read Messages. The reading is done via the Service object and
// affects all Gateway objects defined. This can also be more directed to a specific
// Gateway - look the JavaDocs for information on the Service method calls.
msgList = new ArrayList<InboundMessage>();
Service.getInstance().readMessages(msgList, MessageClasses.ALL);
for (InboundMessage msg : msgList)
System.out.println(msg);
// Sleep now. Emulate real world situation and give a chance to the notifications
// methods to be called in the event of message or voice call reception.
System.out.println("Now Sleeping - Hit <enter> to stop service.");
System.in.read();
System.in.read();
}
catch (Exception e)
{
e.printStackTrace();
}
finally
{
Service.getInstance().stopService();
}
}

public class InboundNotification implements IInboundMessageNotification
{
public void process(AGateway gateway, MessageTypes msgType, InboundMessage msg)
{
if (msgType == MessageTypes.INBOUND) System.out.println(">>> New Inbound message detected from Gateway: " + gateway.getGatewayId());
else if (msgType == MessageTypes.STATUSREPORT) System.out.println(">>> New Inbound Status Report message detected from Gateway: " + gateway.getGatewayId());
System.out.println(msg);
}
}

public class CallNotification implements ICallNotification
{
public void process(AGateway gateway, String callerId)
{
System.out.println(">>> New call detected from Gateway: " + gateway.getGatewayId() + " : " + callerId);
}
}

public class GatewayStatusNotification implements IGatewayStatusNotification
{
public void process(AGateway gateway, GatewayStatuses oldStatus, GatewayStatuses newStatus)
{
System.out.println(">>> Gateway Status change for " + gateway.getGatewayId() + ", OLD: " + oldStatus + " -> NEW: " + newStatus);
}
}

public class OrphanedMessageNotification implements IOrphanedMessageNotification
{
public boolean process(AGateway gateway, InboundMessage msg)
{
System.out.println(">>> Orphaned message part detected from " + gateway.getGatewayId());
System.out.println(msg);
// Since we are just testing, return FALSE and keep the orphaned message part.
return false;
}
}

public static void main(String args[])
{
TestSinaRec app = new TestSinaRec();
try
{
app.doIt();
}
catch (Exception e)
{
e.printStackTrace();
}
}
}

程序输出例如:

Gateway Status change for modem.com4, OLD: STOPPED -> NEW: STARTING Gateway Status change for modem.com4, OLD: STARTING -> NEW: STARTED

Modem Information: Manufacturer: Nokia Model: Nokia 6303i classic Serial No: 355382041051833 SIM IMSI: ** MASKED ** Signal Level: -57 dBm Battery Level: 91%

Now Sleeping - Hit to stop service. New call detected from Gateway: modem.com4 : +989111007483 New call detected from Gateway: modem.com4 : +989111007483

当我搜索这个问题时,我发现了这个:

The correct operation of this method depends on the unsolicited modem indications and on the correct operation of the CNMI command. If you see that you are failing to receive messages using a callback method, probably the modem indications have not been setup correctly.

所以我用诺基亚 6303i 更换了我的手机(我的 GSM 调制解调器),而不是我最初使用的诺基亚 5200,但问题没有解决。所以现在我真的不知道选择其他手机会解决这个问题吗?!或者我应该寻找更好更合理的解决方案。

感谢您为解决此问题提供的任何帮助。

最佳答案

嗯,我唯一能想到的就是你正在启动 Service然后然后将短信发送到调制解调器。因此,此行不会被称为:Service.getInstance().readMessages(msgList, MessageClasses.ALL); .但是,您仍应收到新消息已到达调制解调器的通知。

尝试实现 InboundNotification当它在调制解调器上检测到任何新消息时获取消息。通过覆盖 process() 来做到这一点方法。

但是,这也可能是因为您实际按下的是 <Enter>。太快了。正如评论所说;你必须等待去给通知方法一个被调用的机会。

有时它就是这么愚蠢的事情。如果有任何帮助,或者我是否完全误解了您的问题,请告诉我。我自己正在研究多调制解调器网关,所以我很乐意提供帮助。

关于java - SMSLib 不接收短信 [java 版],我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12332783/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com