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

📄 binmsg.java

📁 这是书中的一个程序
💻 JAVA
字号:
/*
 * BinMsg.java
 *
 * Created on 2005年3月16日, 上午10:32
 */

import javax.microedition.midlet.*;
import javax.microedition.lcdui.*;

import javax.microedition.io.*;
import javax.wireless.messaging.*;
import java.io.*;


/**
 * 二进制消息的接收和发送
 * <p>
 * @author  Liu Bin
 * @version
 */
public class BinMsg extends MIDlet
        implements CommandListener, MessageListener {
    /** 退出命令按钮 */
    private Command cmdExit;
    /** 发送消息的命令按钮 */
    private Command cmdSendMsg;
    
    //Display管理
    private Display display;
    private Form form;
    /** 消息内容 */
    private TextField tfMsgText;
    /** 用于输发送到的电话号码 */
    private TextField tfPhoneNumber;
    
    /** 用于接收消息 */
    private MessageConnection recieveConn;
    
    //在收到二进制消息时,以下一个表单和两个按钮用于显示提示信息
    Command cmdRead ;
    Command cmdReturn;
    Form formNotice;
    
    //用于显示收到的图像
    BinMsgCanvas bmc = new BinMsgCanvas();
    
    /** 保存接收到的二进制消息 */
    private BinaryMessage bm;
    
    public BinMsg() {
        display = Display.getDisplay(this);
        cmdExit = new Command("退出程序", Command.EXIT, 1);
        cmdSendMsg = new Command("二进制格式发送", Command.SCREEN, 2);
        
        tfMsgText = new TextField("请输入消息内容:", "", 255, TextField.ANY);
        tfPhoneNumber = new TextField("请输入接收号码:", "", 255,
                TextField.PHONENUMBER);
    }
    
    /**
     * 开始运行MIDlet
     */
    public void startApp() {
        //创建消息连接
        try {
            recieveConn = (MessageConnection)Connector.open
                    ("sms://:5008");
            // Register the listener for inbound messages.
            recieveConn.setMessageListener(this);
        } catch (IOException ioe) {
            System.out.println("不能进行接收消息连接:" + ioe.toString());
        }
        
        //初始化收到二进制消息时的提示窗口
        cmdRead = new Command("阅读消息", Command.SCREEN, 2);
        cmdReturn = new Command("返回", Command.STOP, 1);
        formNotice = new Form("收到新二进制消息");
        formNotice.addCommand(cmdRead);
        formNotice.setCommandListener(this);
        
        //初始化显示图像的画布
        bmc.addCommand(cmdReturn);
        bmc.setCommandListener(this);
        
        //初始化主窗口
        form = new Form("接收/发送消息演示 - 接收端口为5008");
        form.append(tfMsgText);
        form.append(tfPhoneNumber);
        
        form.addCommand(cmdExit);
        form.addCommand(cmdSendMsg);
        form.setCommandListener(this);
        display.setCurrent(form);
        
    }
    
    
    public void pauseApp() {
    }
    
    public void destroyApp(boolean unconditional) {
        notifyDestroyed();
    }
    
    
    
    /**
     * 处理命令按钮事件
     */
    public void commandAction(Command c, Displayable s) {
        String label = c.getLabel();
        
        if (label.equals("退出程序")) {
            destroyApp(false);
        } else if (label.equals("二进制格式发送")) {
            //检查电话号码是否存在
            String pn = tfPhoneNumber.getString();
            if (pn.equals("")) { //注意如果使用pn==""会不起作用
                Alert alert = new Alert("发送消息错误",
                        "请输入接收的电话号码", null,
                        AlertType.ERROR);
                alert.setTimeout(2000);
                display.setCurrent(alert, form);
                AlertType.ERROR.playSound(display);
            } else {
                try {
                    sendBinMsg(tfMsgText.getString().getBytes(), pn);
                } catch (Exception exc) {
                    exc.printStackTrace();
                }
            }
        } else if (label.equals("阅读消息")) {
            //显示二进制消息内容
            if (bm != null) {
                bmc.setPicData(bm.getPayloadData());
                display.setCurrent(bmc);
                bmc.repaint();
            }
        } else if (label.equals("返回")) {
            //返回主界面
            bm = null;
            display.setCurrent(form);
        }
    }
    
    
    /**
     * 给指定号码发送二进制信息
     * <p>
     * @param content 二进制格式的信息内容
     * @param phoneNumber 手机号码
     * <p>
     * @return 发送成功返回true,否则返回false
     */
    public boolean sendBinMsg(byte[] content,String phoneNumber){
        //返回值
        boolean result = true;
        try{
            //地址
            String address = "sms://+" + phoneNumber;
            //建立连接
            MessageConnection conn=(MessageConnection)Connector.open(address);
            //设置短信息类型为二进制类型
            BinaryMessage msg = (BinaryMessage)conn.newMessage(
                    MessageConnection.BINARY_MESSAGE);
            //设置消息地址
            msg.setAddress(address);
            //设置信息内容
            msg.setPayloadData(content);
            //发送消息
            conn.send(msg);
        }catch(Exception e){
            result = false;
            System.out.println("发送短消息错误:" + e.toString());
        }
        return result;
    }
    
    /**
     * 接收消息
     */
    public void notifyIncomingMessage(MessageConnection conn) {
        System.out.println("收到了一条新信息");
        Message msg = null;
        
        //读取消息
        try {
            msg = conn.receive();
        } catch (Exception e) {
            //处理读取消息时的异常
            System.out.println("读取消息错误:" + e);
        }
        
        //处理读取的二进制消息
        if (msg instanceof BinaryMessage) {
            bm = (BinaryMessage)msg;
            formNotice.deleteAll();
            formNotice.append("发送时间:\n" +
                    bm.getTimestamp().toString() + "\n");
            formNotice.append("消息发送方:\n" + bm.getAddress() + "\n");
            display.setCurrent(formNotice);
        }
        
    }
    
    class BinMsgCanvas extends Canvas {
        byte[] picData = null;
        
        //构造二进制消息显示画布,data 必须为二进制图形数据
        public BinMsgCanvas(byte[] data) {
            picData = data;
        }
        
        public BinMsgCanvas() {    
        }
        
        /**
         * 设置要显示的图形数据
         * <p>
         * @param data  必须为二进制图形数据
         */
        public void setPicData(byte[] data) {
            picData = data;
        }
        
        protected void paint(Graphics g) {
            if (picData != null) {
                ByteArrayInputStream bais=new ByteArrayInputStream(picData);
                Image img;
                try {
                    img = Image.createImage(bais);
                } catch (Exception e) {
                    System.out.println("读取图像数据错误:" + e.toString());
                    return;
                }
                
                //显示图像
                g.drawImage(img,
                        img.getWidth()/2, img.getHeight()/2,
                        Graphics.LEFT | Graphics.TOP);
            }
        }
    }
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -