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. Javadocs for this packages are licensed under the Apache License, Version 2.0 and copied from The Java Community Process - JSR 82 website.
BlueCove expose some initialization API to enables the use of Multiple Adapters and Bluetooth Stacks in parallel in the same JVM.
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; } } } }