【发布时间】:2013-06-24 11:17:59
【问题描述】:
我正在使用 Java 通过 AT 命令从我的 3G 加密狗(GSM 调制解调器)发送 SMS。它大部分都在工作,但有时 SMS 文本包含在此之前触发的部分 AT 命令。这是间歇性的,但需要修复。
相关代码如下:
public void sendMessage(String phoneNumber, String message) throws InterruptedException {
char qu=34;
char cz=26;
send("AT+CMGF=1\r\n");
Thread.sleep(2000);
send("AT+CMGS=" + qu + phoneNumber + qu + ",145\r\n");
send(message + cz + "\r");
}
public static void main(String args[]) {
GSMConnect gsm = new GSMConnect("COM22");
if (gsm.init()) {
try {
gsm.connect();
Thread.sleep(2000);
gsm.sendMessage("+9172xxxxxxxx", "Test Message sent from GSM Modem using AT Commands.");
System.out.println("Sleeping for 20 secs");
Thread.sleep(20000);
gsm.hangup();
} catch (Exception e) {
e.printStackTrace();
}
} else {
System.out.println("Can't init this card");
}
}
我有时收到的信息如下:
AT+CMGS="+9172xxxxxxxx", 145 使用 AT 命令测试从 GSM 调制解调器发送的消息。
============
提前感谢您的帮助!
问候, 库马尔吉特
【问题讨论】:
-
听起来您遇到了多线程问题。您是否不小心一次运行了程序的两个实例?
-
没错。我不得不向 2 个人发送相同的消息。所以我调用了 gsm.sendMessage 两次。但是,即使我将它发送到一个号码,我也遇到了这个问题。还有一些其他命令正在执行,例如 AT+CREG=?和 ATZ
-
您需要有一种机制来保证您一次只能从一个程序访问 COM22。
-
你设置了波特率吗?我遇到了类似的问题,并在一小段延迟后发送命令,否则会发生这种情况,你必须得到延迟的时间
-
AT 命令行应仅以
\r而不是\r\n终止。 stackoverflow.com/a/21503919/23118
标签: java gsm at-command