六狼论坛

 找回密码
 立即注册

QQ登录

只需一步,快速开始

新浪微博账号登陆

只需一步,快速开始

搜索
查看: 93|回复: 0

使用J2ME搜索蓝牙设备,并与搜到的设备通信

[复制链接]

升级  49%

233

主题

233

主题

233

主题

进士

Rank: 4

积分
745
 楼主| 发表于 2013-1-15 08:04:20 | 显示全部楼层 |阅读模式
本文来自http://blog.csdn.net/hellogv/     由于代码来自我目前的项目,所以不能给出完整代码(非常多),只给出关键代码,对于一般J2ME程序员绝对看得懂!
首先,给出J2ME搜索蓝牙设备的代码:  public void commandAction(Command command, Displayable displayable)        {             if(command==cmd_Search)             {                 try                  {                     LocalDevice localDevice = LocalDevice.getLocalDevice();                     DiscoveryAgent discoveryAgent = localDevice.getDiscoveryAgent();                     discoveryAgent.startInquiry(DiscoveryAgent.GIAC,new MyDiscoveryListener(this));                 }                  catch (Exception e)                  {                     MyClass.MessageBox("搜索出错,找不到蓝牙设备!", display);                     return;                 }                                  Menu.removeCommand(cmd_Search);             }        } }class MyDiscoveryListener implements DiscoveryListener {    //用于保存搜索到的设备    Vector devices = new Vector();    SearchDevices midlet;        public MyDiscoveryListener(SearchDevices midlet) {        this.midlet = midlet;    }        public void deviceDiscovered(RemoteDevice btDevice, DeviceClass cod) {        devices.addElement(btDevice);    }        public void inquiryCompleted(int discType) {            for (int i=0;i<devices.size();i++)             {                RemoteDevice btDevice = (RemoteDevice)devices.elementAt(i);                try                 {                    String device_address=btDevice.getBluetoothAddress();//取得蓝牙设备的全球唯一地址        }                 catch (Exception e) {e.printStackTrace();}            }    }    public void servicesDiscovered(int transID, ServiceRecord[] servRecord) {}    public void serviceSearchCompleted(int transID, int responseCode) {}    }接下来就是根据搜索所得的蓝牙设备地址来连接设备,并与设备通信:import java.io.DataInputStream;import java.io.DataOutputStream;import java.io.IOException;import javax.bluetooth.ServiceRecord;import javax.microedition.io.Connector;import javax.microedition.io.StreamConnection;import javax.microedition.lcdui.Command;import javax.microedition.lcdui.CommandListener;import javax.microedition.lcdui.Display;import javax.microedition.lcdui.Displayable;import javax.microedition.lcdui.Form;import javax.microedition.lcdui.TextField;import javax.microedition.midlet.MIDlet;import javax.microedition.midlet.MIDletStateChangeException;public class MIDlet_ConnDevice extends MIDlet implements  Runnable, CommandListener {    private Display display = null;        private Form form = new Form("蓝牙 ");    //用于输入要发送的消息    private TextField tfData = new TextField("请输入发送的消息",            "",255,TextField.ANY);        private Command cmdExit = new Command("退出", Command.EXIT, 0);    private Command cmdSend = new Command("发送", Command.SCREEN, 1);    private Command cmdConnect = new Command("连接", Command.SCREEN, 1);        //线程运行标志    private boolean isRunning = true;        StreamConnection client = null;    //服务器服务记录    ServiceRecord record=null;    private DataInputStream dis = null;    private DataOutputStream dos = null;       public MIDlet_ConnDevice() {        super();        form.append(tfData);        form.addCommand(cmdExit);        form.addCommand(cmdConnect);        form.setCommandListener(this);      }    protected void startApp() throws MIDletStateChangeException {        display = Display.getDisplay(this);        display.setCurrent(form);    }    protected void pauseApp() {        isRunning = false;        close();    }    protected void destroyApp(boolean arg0)        throws MIDletStateChangeException {        isRunning = false;        close();    }        /**     * 处理命令按钮事件     */    public void commandAction(Command cmd, Displayable d) {        if (cmd == cmdExit) {              isRunning = false;            notifyDestroyed();        } else if(cmd == cmdSend) {            //发送数据            new Thread() {                public void run() {                    if (dos == null) {                        return;                    }                    //把输入的字符串变为数字                        try {                                                                dos.writeUTF(tfData.getString());                                                 dos.flush();                                            } catch (IOException e) {                                                    form.append("Send error");                             }                }            }.start();        } else if (cmd == cmdConnect) {            //开始服务器线程            new Thread(this).start();        }    }             /**     * 客户端接收线程     */    public void run() {        isRunning = true;        client = null;        String device_address;//搜索所得的设备地址        String conURL = "btspp://"+device_address+":1";        try {            client = (StreamConnection)Connector.open(conURL);            form.append("Connected!\n");            dis = client.openDataInputStream();            dos = client.openDataOutputStream();            form.removeCommand(cmdConnect);            form.addCommand(cmdSend);        } catch (Exception e) {                form.append("connect error");                close();            return;        }        while(isRunning) {            try {                        if(dis.available()>1)                        {                            byte[] rec_package=new byte[dis.available()];//强烈建议这里使用byte[]                            dis.read(rec_package);                            String str=new String(rec_package);                        }            }                catch (Exception e) {                       form.append("rec error");                break;            }        }        close();        form.removeCommand(cmdSend);        form.addCommand(cmdConnect);    }        /**     * 关闭连接     */    public void close() {        try {            if (dis != null) {                dis.close();                dis = null;            }                        if (dos != null) {                dos.close();                dos = null;            }                        if (client != null) {                client.close();                client = null;            }        } catch (Exception e) {            e.printStackTrace();        }    }}<meta http-equiv="Content-Type" content="text/html; charset=utf-8"><meta name="ProgId" content="Word.Document"><meta name="Generator" content="Microsoft Word 11"><meta name="Originator" content="Microsoft Word 11"><link rel="File-List" href="file:///G:%5CDOCUME~1%5CADMINI~1%5CLOCALS~1%5CTemp%5Cmsohtml1%5C01%5Cclip_filelist.xml"><!--[if gte mso 9]><xml><w:WordDocument><w:View>Normal</w:View><w:Zoom>0</w:Zoom><w:PunctuationKerning /><w:DrawingGridVerticalSpacing>7.8 磅</w:DrawingGridVerticalSpacing><w:DisplayHorizontalDrawingGridEvery>0</w:DisplayHorizontalDrawingGridEvery><w:DisplayVerticalDrawingGridEvery>2</w:DisplayVerticalDrawingGridEvery><w:ValidateAgainstSchemas /><w:SaveIfXMLInvalid>false</w:SaveIfXMLInvalid><w:IgnoreMixedContent>false</w:IgnoreMixedContent><w:AlwaysShowPlaceholderText>false</w:AlwaysShowPlaceholderText><w:Compatibility><w:SpaceForUL /><w:BalanceSingleByteDoubleByteWidth /><w:DoNotLeaveBackslashAlone /><w:ULTrailSpace /><w:DoNotExpandShiftReturn /><w:AdjustLineHeightInTable /><w:BreakWrappedTables /><w:SnapToGridInCell /><w:WrapTextWithPunct /><w:UseAsianBreakRules /><w:DontGrowAutofit /><w:UseFELayout /></w:Compatibility><w:BrowserLevel>MicrosoftInternetExplorer4</w:BrowserLevel></w:WordDocument></xml><![endif]--><!--[if gte mso 9]><xml><w:LatentStyles DefLockedState="false" LatentStyleCount="156"></w:LatentStyles></xml><![endif]--><style type="text/css"><!-- /* Font Definitions */ @font-face{font-family:宋体;panose-1:2 1 6 0 3 1 1 1 1 1;mso-font-alt:SimSun;mso-font-charset:134;mso-generic-font-family:auto;mso-font-pitch:variable;mso-font-signature:3 135135232 16 0 262145 0;}@font-face{font-family:"\@宋体";panose-1:2 1 6 0 3 1 1 1 1 1;mso-font-charset:134;mso-generic-font-family:auto;mso-font-pitch:variable;mso-font-signature:3 135135232 16 0 262145 0;} /* Style Definitions */ p.MsoNormal, li.MsoNormal, div.MsoNormal{mso-style-parent:"";margin:0cm;margin-bottom:.0001pt;text-align:justify;text-justify:inter-ideograph;mso-pagination:none;font-size:10.5pt;mso-bidi-font-size:12.0pt;font-family:"Times New Roman";mso-fareast-font-family:宋体;mso-font-kerning:1.0pt;} /* Page Definitions */ @page{mso-page-border-surround-header:no;mso-page-border-surround-footer:no;}@page Section1{size:595.3pt 841.9pt;margin:72.0pt 90.0pt 72.0pt 90.0pt;mso-header-margin:42.55pt;mso-footer-margin:49.6pt;mso-paper-source:0;layout-grid:15.6pt;}div.Section1{page:Section1;}--></style><!--[if gte mso 10]><style>/* Style Definitions */table.MsoNormalTable{mso-style-name:普通表格;mso-tstyle-rowband-size:0;mso-tstyle-colband-size:0;mso-style-noshow:yes;mso-style-parent:"";mso-padding-alt:0cm 5.4pt 0cm 5.4pt;mso-para-margin:0cm;mso-para-margin-bottom:.0001pt;mso-pagination:widow-orphan;font-size:10.0pt;font-family:"Times New Roman";mso-fareast-font-family:"Times New Roman";mso-ansi-language:#0400;mso-fareast-language:#0400;mso-bidi-language:#0400;}</style><![endif]-->
您需要登录后才可以回帖 登录 | 立即注册 新浪微博账号登陆

本版积分规则

快速回复 返回顶部 返回列表