📄 messagemidlet.java
字号:
/*
* MessageMIDlet.java
*
* Created on 2006年3月5日, 下午5:21
*/
package com.j2medev.chapter6;
import java.io.IOException;
import java.io.UnsupportedEncodingException;
import java.util.Calendar;
import java.util.Date;
import javax.microedition.io.Connector;
import javax.microedition.io.PushRegistry;
import javax.microedition.midlet.*;
import javax.microedition.lcdui.*;
import javax.wireless.messaging.BinaryMessage;
import javax.wireless.messaging.Message;
import javax.wireless.messaging.MessageConnection;
import javax.wireless.messaging.MessageListener;
import javax.wireless.messaging.MessagePart;
import javax.wireless.messaging.MultipartMessage;
import javax.wireless.messaging.TextMessage;
/**
*
* @author ming
* @version
*/
public class MessageMIDlet extends MIDlet implements MessageListener,CommandListener {
private Display display = null;
private MenuCanvas main = new MenuCanvas(this);
private MessageConnection receiveConn = null;
private boolean done = false;
MessageReader reader = null;
public static final Command backCommand = new Command("back",Command.BACK,1);
public void startApp() {
if(display == null){
display = Display.getDisplay(this);
display.setCurrent(main);
String serverURL = "sms://:"+this.getAppProperty("port");
initMessageServer(serverURL);
String[] url = PushRegistry.listConnections(true);
if(url != null && url.length > 0){
reader.handleMessage();
//如果MIDlet被短消息激活,那么在接收后设置监听器
setMessageListener(receiveConn);
}else{
setMessageListener(receiveConn);
display.setCurrent(main);
}
}
}
public void pauseApp() {
}
public void destroyApp(boolean unconditional) {
release();
}
private void exit(){
destroyApp(false);
notifyDestroyed();
}
private void release(){
//释放资源
done = true;
try{
receiveConn.setMessageListener(null);
receiveConn.close();
receiveConn = null;
}catch(IOException ex){
ex.printStackTrace();
}
}
private void setMessageListener(MessageConnection mc){
try{
mc.setMessageListener(this);
}catch(Exception ex){
//处理异常
}
}
private void initMessageServer(String url){
//程序启动后,建立服务器模式的MessageConnection,监听短消息
done = false;
try{
receiveConn = (MessageConnection)Connector.open(url);
//设置监听器,异步模式等待短信
reader = new MessageReader();
new Thread(reader).start();
}catch(IOException ex){
//this.displayError(ex.toString(), list);
displayMessage(ex.getMessage(),main,AlertType.ERROR,"error");
}
}
public void displayMessage(String message,Displayable nextui,AlertType type,String title){
Alert alert = new Alert(title);
alert.setType(type);
alert.setString(message);
alert.setTimeout(2000);
display.setCurrent(alert,nextui);
}
public void displaySuccess(String message){
displayMessage(message,main,AlertType.CONFIRMATION,"Success");
}
public void setCurrent(Displayable displayable){
display.setCurrent(displayable);
}
public void setMainUI(){
display.setCurrent(main);
}
public void setCurrent(int selected){
Displayable displayable = null;
switch(selected){
case 0:{
displayable = new SendMessageUI(this);
break;
}
case 1:{
//fix me outbox
break;
}
case 2:{
//fix me inbox
break;
}
case 3:{
exit();
return;
}
default:
break;
}
setCurrent(displayable);
}
public void notifyIncomingMessage(MessageConnection conn){
if(conn == receiveConn)
reader.handleMessage();
}
public void commandAction(Command cmd,Displayable displayable){
if(cmd.getCommandType() == Command.BACK){
display.setCurrent(main);
}
}
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){
//处理异常
ex.printStackTrace();
}
if(message instanceof TextMessage){
//fix me
Form form = new Form("sms");
TextMessage tm = (TextMessage)message;
String from = tm.getAddress();
String content = tm.getPayloadText();
form.append(from+"\n");
form.append(content);
form.addCommand(backCommand);
form.setCommandListener(MessageMIDlet.this);
display.setCurrent(form);
}else if( message instanceof BinaryMessage){
//这里不考虑BinaryMessage的情况
}else if (message instanceof MultipartMessage){
// try{
// Form form = new Form("mms");
// MultipartMessage mms = (MultipartMessage)message;
// String subject = mms.getSubject();
// form.append("subject:"+subject+"\n");
// String from = mms.getAddress();
// form.append("from:"+from+"\n");
// Date date = mms.getTimestamp();
// form.append("Time:"+parseDate(date));
// MessagePart[] parts = mms.getMessageParts();
// for(int i = 0;i<parts.length;i++){
// String mimeType = parts[i].getMIMEType();
// String contentId = parts[i].getContentID();
// form.append("part"+(i+1)+":"+contentId+"\n");
//
// byte[] data = parts[i].getContent();
// int length = parts[i].getLength();
// String location = parts[i].getContentLocation();
//
// if(mimeType.equals("image/png")){
// Image img = Image.createImage(data,0,length);
// form.append(img);
// }else if(mimeType.equals("text/plain")){
// String s = "";
// try {
// s = new String(data, parts[i].getEncoding());
// } catch (UnsupportedEncodingException ex) {
// ex.printStackTrace();
// }
// StringItem text = new StringItem(s,null);
// text.setLayout(Item.LAYOUT_NEWLINE_BEFORE);
// form.append(text);
// }
// }
// form.addCommand(backCommand);
// form.setCommandListener(MessageMIDlet.this);
// display.setCurrent(form);
// }catch(Exception ex){
// ex.printStackTrace();
// }
}
}
}
//短消息进入,唤醒等待的线程读取消息
public synchronized void handleMessage(){
pendingMessage++;//未读取的消息数增加1
notify();
}
private String parseDate(Date d){
StringBuffer sb = new StringBuffer();
Calendar calendar = Calendar.getInstance();
calendar.setTime(d);
sb.append(calendar.get(Calendar.YEAR)+"-").append((1+calendar.get(Calendar.MONTH))+"-").
append(calendar.get(Calendar.DAY_OF_MONTH)+":").append(calendar.get(Calendar.HOUR_OF_DAY)+"-").append(calendar.get(calendar.MINUTE));
return sb.toString();
}
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -