BlueCove provides an implementation of the JSR 82. Applications should use API defined in JSR-82. See javax.bluetooth package for JSR-82 Bluetooth API and javax.obex package for JSR-82 OBEX API.
Examples avalable on this page can be downloaded from SVN repository
import java.io.IOException; import java.util.Vector; import javax.bluetooth.*; /** * Minimal Device Discovery example. */ public class RemoteDeviceDiscovery { public static final Vector/*<RemoteDevice>*/ devicesDiscovered = new Vector(); public static void main(String[] args) throws IOException, InterruptedException { final Object inquiryCompletedEvent = new Object(); devicesDiscovered.clear(); DiscoveryListener listener = new DiscoveryListener() { public void deviceDiscovered(RemoteDevice btDevice, DeviceClass cod) { System.out.println("Device " + btDevice.getBluetoothAddress() + " found"); devicesDiscovered.addElement(btDevice); try { System.out.println(" name " + btDevice.getFriendlyName(false)); } catch (IOException cantGetDeviceName) { } } public void inquiryCompleted(int discType) { System.out.println("Device Inquiry completed!"); synchronized(inquiryCompletedEvent){ inquiryCompletedEvent.notifyAll(); } } public void serviceSearchCompleted(int transID, int respCode) { } public void servicesDiscovered(int transID, ServiceRecord[] servRecord) { } }; synchronized(inquiryCompletedEvent) { boolean started = LocalDevice.getLocalDevice().getDiscoveryAgent().startInquiry(DiscoveryAgent.GIAC, listener); if (started) { System.out.println("wait for device inquiry to complete..."); inquiryCompletedEvent.wait(); System.out.println(devicesDiscovered.size() + " device(s) found"); } } } }
import java.io.IOException; import java.util.Enumeration; import java.util.Vector; import javax.bluetooth.*; /** * * Minimal Services Search example. */ public class ServicesSearch { static final UUID OBEX_FILE_TRANSFER = new UUID(0x1106); public static final Vector/*<String>*/ serviceFound = new Vector(); public static void main(String[] args) throws IOException, InterruptedException { // First run RemoteDeviceDiscovery and use discoved device RemoteDeviceDiscovery.main(null); serviceFound.clear(); UUID serviceUUID = OBEX_OBJECT_PUSH; if ((args != null) && (args.length > 0)) { serviceUUID = new UUID(args[0], false); } final Object serviceSearchCompletedEvent = new Object(); DiscoveryListener listener = new DiscoveryListener() { public void deviceDiscovered(RemoteDevice btDevice, DeviceClass cod) { } public void inquiryCompleted(int discType) { } public void servicesDiscovered(int transID, ServiceRecord[] servRecord) { for (int i = 0; i < servRecord.length; i++) { String url = servRecord[i].getConnectionURL(ServiceRecord.NOAUTHENTICATE_NOENCRYPT, false); if (url == null) { continue; } serviceFound.add(url); DataElement serviceName = servRecord[i].getAttributeValue(0x0100); if (serviceName != null) { System.out.println("service " + serviceName.getValue() + " found " + url); } else { System.out.println("service found " + url); } } } public void serviceSearchCompleted(int transID, int respCode) { System.out.println("service search completed!"); synchronized(serviceSearchCompletedEvent){ serviceSearchCompletedEvent.notifyAll(); } } }; UUID[] searchUuidSet = new UUID[] { serviceUUID }; int[] attrIDs = new int[] { 0x0100 // Service name }; for(Enumeration en = RemoteDeviceDiscovery.devicesDiscovered.elements(); en.hasMoreElements(); ) { RemoteDevice btDevice = (RemoteDevice)en.nextElement(); synchronized(serviceSearchCompletedEvent) { System.out.println("search services on " + btDevice.getBluetoothAddress() + " " + btDevice.getFriendlyName(false)); LocalDevice.getLocalDevice().getDiscoveryAgent().searchServices(attrIDs, searchUuidSet, btDevice, listener); serviceSearchCompletedEvent.wait(); } } } }
import java.io.IOException; import java.io.OutputStream; import javax.microedition.io.Connector; import javax.obex.*; public class ObexPutClient { public static void main(String[] args) throws IOException, InterruptedException { String serverURL = null; // = "btgoep://0019639C4007:6"; if ((args != null) && (args.length > 0)) { serverURL = args[0]; } if (serverURL == null) { String[] searchArgs = null; // Connect to OBEXPutServer from examples // searchArgs = new String[] { "11111111111111111111111111111123" }; ServicesSearch.main(searchArgs); if (ServicesSearch.serviceFound.size() == 0) { System.out.println("OBEX service not found"); return; } // Select the first service found serverURL = (String)ServicesSearch.serviceFound.elementAt(0); } System.out.println("Connecting to " + serverURL); ClientSession clientSession = (ClientSession) Connector.open(serverURL); HeaderSet hsConnectReply = clientSession.connect(null); if (hsConnectReply.getResponseCode() != ResponseCodes.OBEX_HTTP_OK) { System.out.println("Failed to connect"); return; } HeaderSet hsOperation = clientSession.createHeaderSet(); hsOperation.setHeader(HeaderSet.NAME, "Hello.txt"); hsOperation.setHeader(HeaderSet.TYPE, "text"); //Create PUT Operation Operation putOperation = clientSession.put(hsOperation); // Send some text to server byte data[] = "Hello world!".getBytes("iso-8859-1"); OutputStream os = putOperation.openOutputStream(); os.write(data); os.close(); putOperation.close(); clientSession.disconnect(null); clientSession.close(); } }
import java.io.IOException; import java.io.InputStream; import javax.bluetooth.*; import javax.microedition.io.Connector; import javax.obex.*; public class OBEXPutServer { static final String serverUUID = "11111111111111111111111111111123"; public static void main(String[] args) throws IOException { LocalDevice.getLocalDevice().setDiscoverable(DiscoveryAgent.GIAC); SessionNotifier serverConnection = (SessionNotifier) Connector.open("btgoep://localhost:" + serverUUID + ";name=ObexExample"); int count = 0; while(count < 2) { RequestHandler handler = new RequestHandler(); serverConnection.acceptAndOpen(handler); System.out.println("Received OBEX connection " + (++count)); } } private static class RequestHandler extends ServerRequestHandler { public int onPut(Operation op) { try { HeaderSet hs = op.getReceivedHeaders(); String name = (String) hs.getHeader(HeaderSet.NAME); if (name != null) { System.out.println("put name:" + name); } InputStream is = op.openInputStream(); StringBuffer buf = new StringBuffer(); int data; while ((data = is.read()) != -1) { buf.append((char) data); } System.out.println("got:" + buf.toString()); op.close(); return ResponseCodes.OBEX_HTTP_OK; } catch (IOException e) { e.printStackTrace(); return ResponseCodes.OBEX_HTTP_UNAVAILABLE; } } } }