⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 receivemms.java

📁 java me的一些源码,包括多媒体(声音、视频)
💻 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 + -