package eu.hgross.blaubot.bluetooth; import java.io.BufferedReader; import java.io.IOException; import java.io.InputStream; import java.io.InputStreamReader; import java.io.OutputStream; import java.io.OutputStreamWriter; import java.io.PrintWriter; import java.util.Vector; import javax.bluetooth.DeviceClass; import javax.bluetooth.DiscoveryAgent; import javax.bluetooth.DiscoveryListener; import javax.bluetooth.LocalDevice; import javax.bluetooth.RemoteDevice; import javax.bluetooth.ServiceRecord; import javax.bluetooth.UUID; import javax.microedition.io.Connector; import javax.microedition.io.StreamConnection; /** * A simple SPP client that connects with an SPP server */ public class SampleSPPClient implements DiscoveryListener { //object used for waiting private static Object lock = new Object(); //vector containing the devices discovered private static Vector vecDevices = new Vector(); private static String connectionURL = null; public static void main(String[] args) throws IOException { SampleSPPClient client = new SampleSPPClient(); //display local device address and name LocalDevice localDevice = LocalDevice.getLocalDevice(); System.out.println("Address: " + localDevice.getBluetoothAddress()); System.out.println("Name: " + localDevice.getFriendlyName()); //find devices DiscoveryAgent agent = localDevice.getDiscoveryAgent(); System.out.println("Starting device inquiry ..."); agent.startInquiry(DiscoveryAgent.GIAC, client); try { synchronized (lock) { lock.wait(); } } catch (InterruptedException e) { e.printStackTrace(); } System.out.println("Device Inquiry Completed. "); //print all devices in vecDevices int deviceCount = vecDevices.size(); if (deviceCount <= 0) { System.out.println("No Devices Found ."); System.exit(0); } else { //print bluetooth device addresses and names in the format [ No. address (name) ] System.out.println("Bluetooth Devices: "); for (int i = 0; i < deviceCount; i++) { RemoteDevice remoteDevice = (RemoteDevice) vecDevices.elementAt(i); System.out.println((i + 1) + ". " + remoteDevice.getBluetoothAddress() + " (" + remoteDevice.getFriendlyName(true) + ")"); } } System.out.print("Choose Device index: "); BufferedReader bReader = new BufferedReader(new InputStreamReader(System.in)); String chosenIndex = bReader.readLine(); int index = Integer.parseInt(chosenIndex.trim()); //check for spp service RemoteDevice remoteDevice = (RemoteDevice) vecDevices.elementAt(index - 1); UUID[] uuidSet = new UUID[1]; uuidSet[0] = new UUID("1101", false); System.out.println("\nSearching for service..."); agent.searchServices(null, uuidSet, remoteDevice, client); try { synchronized (lock) { lock.wait(); } } catch (InterruptedException e) { e.printStackTrace(); } if (connectionURL == null) { System.out.println("Device does not support Simple SPP Service."); System.exit(0); } //connect to the server and send a line of text StreamConnection streamConnection = (StreamConnection) Connector.open(connectionURL); //send string OutputStream outStream = streamConnection.openOutputStream(); PrintWriter pWriter = new PrintWriter(new OutputStreamWriter(outStream)); pWriter.write("Test String from SPP Client\r\n"); pWriter.flush(); //read response InputStream inStream = streamConnection.openInputStream(); BufferedReader bReader2 = new BufferedReader(new InputStreamReader(inStream)); String lineRead = bReader2.readLine(); System.out.println(lineRead); } public void deviceDiscovered(RemoteDevice btDevice, DeviceClass cod) { if (!vecDevices.contains(btDevice)) { vecDevices.addElement(btDevice); } } public void servicesDiscovered(int transID, ServiceRecord[] servRecord) { if (servRecord != null && servRecord.length > 0) { connectionURL = servRecord[0].getConnectionURL(0, false); } synchronized (lock) { lock.notify(); } } public void serviceSearchCompleted(int transID, int respCode) { synchronized (lock) { lock.notify(); } } public void inquiryCompleted(int discType) { synchronized (lock) { lock.notify(); } } }