📄 receiver.java
字号:
package tom.jiafei;
import javax.wireless.messaging.MessageConnection;
import javax.wireless.messaging.Message;
import javax.wireless.messaging.TextMessage;
import javax.microedition.io.Connector;
import java.io.IOException;
/**
* 该类提供了接收短消息的功能
*/
public class Receiver implements Runnable {
private SMSMIDlet midlet;
private int pendingMessages = 0; //未处理的消息
private boolean dead = true;
private MessageConnection msgConn;
private Inbox inbox; //收件箱
public Receiver(SMSMIDlet midlet, Inbox inbox) {
this.midlet = midlet;
this.inbox = inbox;
}
//在端口port打开一个sms连接,并启动一个接收消息的线程
public MessageConnection openConnection(String port) throws IOException {
msgConn = (MessageConnection)Connector.open("sms://:" + port);
pendingMessages = 0;
dead = false;
//创建消息接收线程,并启动
Thread t = new Thread(this);
t.start();
return msgConn;
}
//终止线程
public synchronized void release() {
try {
msgConn.setMessageListener(null);
dead = true;
notify(); //通知线程
}
catch(IOException ioe) {
//
}
}
//处理消息
public synchronized void handleMessage() {
pendingMessages++;
notify(); //通知线程,接收消息。
}
//返回收件箱
public Inbox getInbox() {
return inbox;
}
//接收到来的消息
public void run() {
while(!dead) {
synchronized(this) {
while(!dead && pendingMessages == 0) {
try {
wait(); //等待
}
catch(InterruptedException ie) {
}
}
}
if(!dead) {
try {
//接收短信息
Message message = msgConn.receive();
pendingMessages--;
if(message instanceof TextMessage) {
inbox.add((TextMessage)message);
midlet.notifyUser();
}
else {
midlet.showError("不能解析的消息格式!");
}
}
catch(IOException ioe) {
midlet.showError("接收信息错误!\n" + ioe.toString());
}
}
}
try {
msgConn.close();
msgConn = null;
}
catch(IOException ioe) {
}
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -