📄 receivemms.java
字号:
import java.io.ByteArrayInputStream;
import java.io.IOException;
import javax.microedition.io.Connector;
import javax.microedition.lcdui.Alert;
import javax.microedition.lcdui.AlertType;
import javax.microedition.lcdui.Canvas;
import javax.microedition.lcdui.Command;
import javax.microedition.lcdui.CommandListener;
import javax.microedition.lcdui.Display;
import javax.microedition.lcdui.Displayable;
import javax.microedition.lcdui.Graphics;
import javax.microedition.lcdui.Image;
import javax.microedition.midlet.MIDlet;
import javax.microedition.midlet.MIDletStateChangeException;
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;
public class ReceiveMMS extends MIDlet
implements CommandListener,MessageListener {
private Display display = null;
/** 退出命令按钮 */
private Command cmdExit = new Command("退出", Command.EXIT, 1);
/** 否阅读消息 */
private Command cmdRead = new Command("阅读", Command.SCREEN, 1);
/** 返回 */
private Command cmdBack = new Command("返回", Command.BACK, 1);
MMSCanvas bc = new MMSCanvas();
/** 用于接收消息 */
private MessageConnection mc;
public ReceiveMMS() {
super();
bc.addCommand(cmdExit);
bc.setCommandListener(this);
}
protected void startApp() throws MIDletStateChangeException {
display = Display.getDisplay(this);
display.setCurrent(bc);
//启动消息监听
startMsgListener();
}
protected void pauseApp() {
close();
}
protected void destroyApp(boolean arg0)
throws MIDletStateChangeException {
close();
}
private void close() {
bc.isRunning = false;
try {
mc.setMessageListener(null);
mc.close();
} catch (IOException e) {
e.printStackTrace();
}
mc =null;
}
private void startMsgListener() {
try {
mc = (MessageConnection)Connector.open
("mms://:appid");
//注册消息监听器.
mc.setMessageListener(this);
} catch (Exception e) {
System.out.println("不能进行接收消息连接:" + e.toString());
}
}
/**
* 当有消息到达时执行该函数
*/
public void notifyIncomingMessage(MessageConnection mc) {
if (this.mc == mc) {
Alert alert = new Alert("收到新消息",
"是否阅读?", null,
AlertType.CONFIRMATION);
alert.addCommand(cmdBack);
alert.addCommand(cmdRead);
alert.setCommandListener(this);
alert.setTimeout(Alert.FOREVER);
display.setCurrent(alert, bc);
AlertType.CONFIRMATION.playSound(display);
}
}
/**
* 处理命令按钮事件
*/
public void commandAction(Command c, Displayable s) {
if (c == cmdExit) {
notifyDestroyed();
} else if (c == cmdRead) {
//在独立的线程中接收消息
new Thread() {
public void run() {
Message msg=null;
try {
msg = mc.receive();
} catch (IOException e) {
//处理读取消息时发生的错误
System.out.println("读取消息时发生异常:" +
e.toString());
}
//处理读取的文本消息
if ((msg != null) && (msg instanceof MultipartMessage)) {
MultipartMessage mms = (MultipartMessage)msg;
System.out.println("接收到一条消息,接收时间:" +
mms.getTimestamp().toString());
System.out.println("消息发送方:" + mms.getAddress());
System.out.println("主题:"+ mms.getSubject());
String[] addr = mms.getAddresses("From");
//只显示第1个地址
System.out.println("From: " + addr[0]);
MessagePart[] parts = mms.getMessageParts();
if (parts != null) {
for (int i = 0; i < parts.length; i++) {
MessagePart mp = parts[i];
String mime = mp.getMIMEType();
//只处理图像
if (mime.equals("image/jpeg") ||
mime.endsWith("image/gif")) {
byte[] data = mp.getContent();
bc.getImageFromData(data);
}
}
bc.isRunning = true;
new Thread(bc).start();
}
}
display.setCurrent(bc);
}
}.start();
} else if (c == cmdBack) {
display.setCurrent(bc);
}
}
}
class MMSCanvas extends Canvas implements Runnable {
//最多显示5个图像
private Image img[] = new Image[5];
int index = 0;
boolean isRunning = true;
String msg1;
String msg2;
protected void paint(Graphics g) {
//清除屏幕
g.setColor(0x000000);
g.fillRect(0, 0, getWidth(), getHeight());
if (img[index] != null ) {
//居中显示图像
g.drawImage(img[index],
(getWidth() - img[index].getWidth())/2,
(getHeight() - img[index].getHeight())/2,
Graphics.LEFT | Graphics.TOP);
}
}
public void run() {
while(isRunning) {
index++;
if(index>=img.length) {
index = 0;
}
repaint();
try {
//休息200毫秒,然后显示下一个图像
Thread.sleep(200);
} catch(Exception e) {}
}
}
/**
* 根据图像数据生成Image对象
* <p>
* @param data 必须为二进制图形数据
*/
public void getImageFromData(byte[] picData) {
ByteArrayInputStream bais=new ByteArrayInputStream(picData);
if (index<img.length) {
try {
img[index++] = Image.createImage(bais);
} catch (Exception e) {
e.printStackTrace();
}
}
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -