nello 发表于 2013-1-15 08:04:20

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

本文来自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 implementsRunnable, 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;//强烈建议这里使用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"><!--><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><!--><!--><xml><w:LatentStyles DefLockedState="false" LatentStyleCount="156"></w:LatentStyles></xml><!--><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><!--><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><!-->
页: [1]
查看完整版本: 使用J2ME搜索蓝牙设备,并与搜到的设备通信