i want to write bluetooth base app for send and recive string between two device . i have problem . i send string from device A and device B recive it but when i try to send answer from device B to A i get this notifier :
Quote
javax.bluetooth.BluetoothExeption: unable to swithc master
it is becouse this part of code :
StreamConnection conn =(StreamConnection) Connector.open(connString);
this is my code
Client Class :
import java.io.*; import javax.bluetooth.*; import javax.microedition.io.Connector; import javax.microedition.io.StreamConnection; import javax.microedition.lcdui.*; /** * * @author mahdi */ class Client implements CommandListener, Runnable { Display display; String msg; Midlet midlet; Form frm; Command cmdBack = new Command("Back", Command.BACK, 1); LocalDevice local = null; DiscoveryAgent agent = null; Thread thread; StreamConnection conn = null; OutputStream out = null; public Client(String string, Midlet midlet, Display display) { this.display = display; this.midlet = midlet; this.msg = string; frm = new Form("Send Form"); frm.addCommand(cmdBack); frm.setCommandListener(this); thread = new Thread(this); thread.start(); display.setCurrent(frm); } private void doDiscovery() { try { local = LocalDevice.getLocalDevice(); agent = local.getDiscoveryAgent(); String connString = agent.selectService(new UUID("86b4d249fb8844d6a756ec265dd1f6a3", false), ServiceRecord.NOAUTHENTICATE_NOENCRYPT, true); if (connString != null) { try { conn = (StreamConnection) Connector.open(connString); } catch (IOException ex) { frm.append(ex.toString() + "1"); } try { out = conn.openOutputStream(); } catch (IOException ex) { frm.append(ex.toString() + "2"); } try { out.write(msg.getBytes()); } catch (IOException ex) { frm.append(ex.toString() + "3"); } try { out.close(); } catch (IOException ex) { frm.append(ex.toString() + "4"); } try { conn.close(); } catch (IOException ex) { frm.append(ex.toString() + "5"); } System.out.println("Message sent currectly"); } else { frm.append("connString == null"); } } catch (BluetoothStateException ex) { frm.append(ex.toString() + "6"); } } public void commandAction(Command c, Displayable d) { if (c == cmdBack) { display.setCurrent(midlet.tb); } } public void run() { doDiscovery(); } }
Server Class :
import java.io.*; import javax.bluetooth.*; import javax.microedition.io.Connector; import javax.microedition.io.StreamConnection; import javax.microedition.io.StreamConnectionNotifier; import javax.microedition.lcdui.*; /** * * @author mahdi */ class Server implements Runnable { Display display; String msg; Midlet midlet; Thread thread; private boolean endRecive = false; public Server(Midlet midlet, Display display) { this.display = display; this.midlet = midlet; thread = new Thread(this); thread.start(); } private void recive() { try { LocalDevice local = LocalDevice.getLocalDevice(); if (!local.setDiscoverable(DiscoveryAgent.GIAC)) { midlet.tb.setString("Failed to change to the discoverable mode"); return; } StreamConnectionNotifier notifier = (StreamConnectionNotifier) Connector.open("btspp://localhost:" + "86b4d249fb8844d6a756ec265dd1f6a3"); StreamConnection conn = notifier.acceptAndOpen(); InputStream in = conn.openInputStream(); ByteArrayOutputStream out = new ByteArrayOutputStream(); int data; while ((data = in.read()) != -1) { out.write(data); } midlet.tb.delete(0, midlet.tb.size()); midlet.tb.setString(out.toString()); in.close(); conn.close(); notifier.close(); endRecive = true; thread.interrupt(); } catch (Exception ex) { System.out.println(ex.toString()); } } public void run() { while (endRecive != true) { try { Thread.sleep(100); } catch (InterruptedException ex) { ex.printStackTrace(); } recive(); } } }
and midlet :
import javax.microedition.lcdui.Command; import javax.microedition.lcdui.CommandListener; import javax.microedition.lcdui.Display; import javax.microedition.lcdui.Displayable; import javax.microedition.lcdui.TextBox; import javax.microedition.lcdui.TextField; import javax.microedition.midlet.*; /** * @author mahdi */ public class Midlet extends MIDlet implements CommandListener { Display display = Display.getDisplay(this); TextBox tb = new TextBox("Chat", null, 100, TextField.ANY); Command cmdSend = new Command("Send", Command.OK, 1); Command cmdRecive = new Command("Recive", Command.OK, 2); Command cmdClear = new Command("Clear...", Command.OK, 3); Command cmdExit = new Command("Exit", Command.EXIT, 4); public void startApp() { tb.addCommand(cmdSend); tb.addCommand(cmdRecive); tb.addCommand(cmdClear); tb.addCommand(cmdExit); tb.setCommandListener(this); display.setCurrent(tb); } public void pauseApp() { } public void destroyApp(boolean unconditional) { notifyDestroyed(); } public void commandAction(Command c, Displayable d) { if (c == cmdExit) { destroyApp(true); } else if (c == cmdClear) { tb.delete(0, tb.size()); } else if (c == cmdSend && tb.getString().length() > 0) { new Client(tb.getString(), this, display); } else if (c == cmdRecive) { tb.setString("Wait ..."); new Server(this, display); } } }
what should i do for slove this probleam ?
please help me
thanks