使用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]