📄 smsmidlet.java
字号:
package com.j2medev.ch6.wma;
import java.io.IOException;
import javax.microedition.io.Connector;
import javax.microedition.midlet.*;
import javax.microedition.lcdui.*;
import javax.wireless.messaging.*;
public class SMSMIDlet extends MIDlet implements CommandListener,MessageListener{
private Display display = null;
//以服务器模式运行的MessageConnection
private MessageConnection receiveConn = null;
private boolean done = false;
MessageReader reader = null;
private List list = null; //主界面
private Displayable resume = null;
private SendMessageUI send = null;
public static final String[] items = {"发信息","收件箱"};
public static final Command exitCommand = new Command("退出",Command.EXIT,1);
public static final Command backCommand = new Command("返回",Command.BACK,2);
public void startApp() {
if(display == null){
display = Display.getDisplay(this);
list = new List("短消息中心",List.IMPLICIT, items, null);
resume = list;
list.addCommand(exitCommand);
list.setCommandListener(this);
}
initMessageServer();
display.setCurrent(resume);
}
private void initMessageServer(){
//程序启动后,建立服务器模式的MessageConnection,监听短消息
done = false;
String url = "sms://:"+this.getAppProperty("port");
System.out.println(url);
try{
receiveConn = (MessageConnection)Connector.open(url);
//设置监听器,异步模式等待短信
receiveConn.setMessageListener(this);
reader = new MessageReader();
new Thread(reader).start();
}catch(IOException ex){
this.displayError(ex.toString(), list);
}
}
public void pauseApp() {
//保存当前界面
resume = display.getCurrent();
release();
}
public void destroyApp(boolean unconditional) {
release();
}
private void release(){
//释放资源
done = true;
try{
receiveConn.setMessageListener(null);
receiveConn.close();
receiveConn = null;
}catch(IOException ex){
ex.printStackTrace();
}
}
public void setCurrent(Displayable displayable){
display.setCurrent(displayable);
}
public void displayError(String message,Displayable displayable){
Alert alert = new Alert("错误提示");
alert.setType(AlertType.ERROR);
alert.setString(message);
alert.setTimeout(2000);
display.setCurrent(alert, displayable);
}
public void backToMain(){
display.setCurrent(list);
}
public void commandAction(Command cmd,Displayable displayable){
if(cmd == exitCommand){
destroyApp(false);
notifyDestroyed();
}else if(cmd == List.SELECT_COMMAND){
String label = list.getString(list.getSelectedIndex());
if(label.equals(items[0])){
if(send == null)
send = new SendMessageUI(this);
send.clean();
display.setCurrent(send);
}else if(label.equals(items[1])){
}
}else if(cmd == backCommand){
display.setCurrent(list);
}
}
//当消息到来的时候,nitifyIncomingMessage()方法被调用
public void notifyIncomingMessage(MessageConnection messconn){
if(messconn == receiveConn){
reader.handleMessage();
}
}
class MessageReader implements Runnable{
private int pendingMessage = 0;
public void run(){
while(!done){
synchronized(this){
//如果没有消息,则线程等待
if(pendingMessage == 0){
try{
wait();
}catch(InterruptedException ex){
ex.printStackTrace();
}
}
//读取消息,pendingMessage--
pendingMessage--;
}
//接收短信
Message message = null;
try{
message = receiveConn.receive();
}catch(IOException ex){
//处理异常
}
if(message instanceof TextMessage){
TextMessage tm = (TextMessage)message;
String content = tm.getPayloadText();
String address = tm.getAddress();
Form form = new Form("接收到短信");
form.append(address+"\n");
form.append(content+"\n");
form.addCommand(backCommand);
form.setCommandListener(SMSMIDlet.this);
display.setCurrent(form);
}else if(message instanceof BinaryMessage){
//这里不考虑BinaryMessage的情况
}
}
}
//又短消息进入,唤醒等待的线程读取消息
public synchronized void handleMessage(){
pendingMessage++;//未读取的消息数增加1
notify();
}
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -