Java --- Bluetooth Device & Service Discovery Code examples

来源:互联网 发布:jquery.min.js下载1.9 编辑:程序博客网 时间:2024/05/20 20:19
import java.io.IOException;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;/** * Class that discovers all bluetooth devices in the neighborhood and displays their name and * bluetooth address. */public class BluetoothDeviceDiscovery implements DiscoveryListener {        // object used for waiting        private static Object lock = new Object();        // vector containing the devices discovered        private static Vector<RemoteDevice> vecDevices = new Vector<RemoteDevice>();        /**         * Lists nearby bluetooth devices         *          * @return         */        public void listDevices() throws IOException {                // 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, this);                // avoid callback conflicts                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 .");                } 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);                                try {                                        System.out.println((i + 1) + ". " + remoteDevice.getBluetoothAddress() + " (" + remoteDevice.getFriendlyName(true) + ")");                                } catch (IOException ioe) {                                        ioe.printStackTrace();                                }                        }                }        }        /**         * @return the vecDevices         */        public static Vector<RemoteDevice> getVecDevices() {                return vecDevices;        }        /**         * This call back method will be called for each discovered bluetooth devices.         */        public void deviceDiscovered(RemoteDevice btDevice, DeviceClass cod) {                System.out.println("Device discovered: " + btDevice.getBluetoothAddress());                // add the device to the vector                if (!vecDevices.contains(btDevice)) {                        vecDevices.addElement(btDevice);                }        }        // no need to implement this method since services are not being discovered        public void servicesDiscovered(int transID, ServiceRecord[] servRecord) {        }        // no need to implement this method since services are not being discovered        public void serviceSearchCompleted(int transID, int respCode) {        }        /**         * This callback method will be called when the device discovery is completed.         */        public void inquiryCompleted(int discType) {                synchronized (lock) {                        lock.notify();                }                switch (discType) {                case DiscoveryListener.INQUIRY_COMPLETED:                        System.out.println("INQUIRY_COMPLETED");                        break;                case DiscoveryListener.INQUIRY_TERMINATED:                        System.out.println("INQUIRY_TERMINATED");                        break;                case DiscoveryListener.INQUIRY_ERROR:                        System.out.println("INQUIRY_ERROR");                        break;                default:                        System.out.println("Unknown Response Code");                        break;                }        }// end method}



import java.io.BufferedReader;import java.io.IOException;import java.io.InputStreamReader;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;/** *  * Class that discovers all bluetooth devices in the neighborhood, *  * Connects to the chosen device and checks for the presence of OBEX push service in it. and * displays their name and bluetooth address. *  *  */public class BluetoothServiceDiscovery implements DiscoveryListener {        // object used for waiting        private static Object lock = new Object();        // vector containing the devices discovered        private static Vector<RemoteDevice> vecDevices = new Vector<RemoteDevice>();        // device connection address        private static String connectionURL = null;        /**         * Lists nearby bluetooth device services         */        public void listServices() throws IOException {                // 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, this);                // avoid callback conflicts                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 .");                } 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);                                try {                                        System.out.println((i + 1) + ". " + remoteDevice.getBluetoothAddress() + " (" + remoteDevice.getFriendlyName(true) + ")");                                } catch (IOException ioe) {                                        ioe.printStackTrace();                                }                        }                }                // prompt user                System.out.print("Choose the device to search for Obex Push service : ");                BufferedReader bReader = new BufferedReader(new InputStreamReader(System.in));                String chosenIndex = bReader.readLine();                int index = Integer.parseInt(chosenIndex.trim());                // check for obex service                RemoteDevice remoteDevice = (RemoteDevice) vecDevices.elementAt(index - 1);                UUID[] uuidSet = new UUID[1];                uuidSet[0] = new UUID("1105", true);                System.out.println("\nSearching for service...");                agent.searchServices(null, uuidSet, remoteDevice, this);                // avoid callback conflicts                try {                        synchronized (lock) {                                lock.wait();                        }                } catch (InterruptedException e) {                        e.printStackTrace();                }                // notify                if (connectionURL == null) {                        System.out.println("Device does not support Object Push.");                } else {                        System.out.println("Device supports Object Push.");                }        }        /**         * Called when a bluetooth device is discovered. Used for device search.         */        public void deviceDiscovered(RemoteDevice btDevice, DeviceClass cod) {                // add the device to the vector                if (!vecDevices.contains(btDevice)) {                        vecDevices.addElement(btDevice);                }        }        /**         * Called when a bluetooth service is discovered. Used for service search.         */        public void servicesDiscovered(int transID, ServiceRecord[] servRecord) {                if (servRecord != null && servRecord.length > 0) {                        connectionURL = servRecord[0].getConnectionURL(0, false);                }                synchronized (lock) {                        lock.notify();                }        }        /**         * Called when the service search is over.         */        public void serviceSearchCompleted(int transID, int respCode) {                synchronized (lock) {                        lock.notify();                }        }        /**         * Called when the device search is over.         */        public void inquiryCompleted(int discType) {                synchronized (lock) {                        lock.notify();                }        }// end method}// end class

import java.io.BufferedReader;import java.io.IOException;import java.io.InputStream;import java.io.InputStreamReader;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;import data.model.Node;import data.parser.DataParser;/** * A simple SPP client that connects with an SPP server */public class SimpleSPPClient implements DiscoveryListener {// object used for waitingprivate static Object lock = new Object();// vector containing the devices discoveredprivate static Vector<RemoteDevice> vecDevices = new Vector<RemoteDevice>();// device connection addressprivate static String connectionURL = null;/** * runs a bluetooth client that sends a string to a server and prints the * response */public void runClient() throws IOException {// display local device address and nameLocalDevice localDevice = LocalDevice.getLocalDevice();System.out.println("Address: " + localDevice.getBluetoothAddress());System.out.println("Name: " + localDevice.getFriendlyName());// find devicesDiscoveryAgent agent = localDevice.getDiscoveryAgent();System.out.println("Starting device inquiry...");agent.startInquiry(DiscoveryAgent.GIAC, this);// avoid callback conflictstry {synchronized (lock) {lock.wait();}} catch (InterruptedException e) {e.printStackTrace();}System.out.println("Device Inquiry Completed. ");// print all devices in vecDevicesint deviceCount = vecDevices.size();if (deviceCount <= 0) {System.out.println("No Devices Found .");} 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);try {System.out.println((i + 1) + ". "+ remoteDevice.getBluetoothAddress() + " ("+ remoteDevice.getFriendlyName(true) + ")");} catch (IOException ioe) {ioe.printStackTrace();}}}// prompt userSystem.out.print("Choose the device to search for service : ");BufferedReader bReader = new BufferedReader(new InputStreamReader(System.in));String chosenIndex = bReader.readLine();int index = Integer.parseInt(chosenIndex.trim());// check for servicesRemoteDevice remoteDevice = (RemoteDevice) vecDevices.elementAt(index - 1);UUID[] uuidSet = new UUID[1];uuidSet[0] = new UUID("1101", true); // serial, SPP// uuidSet[0] = new UUID("0003", true); // rfcomm// uuidSet[0] = new UUID("1106", true); // obex file transfer// uuidSet[0] = new UUID("1105", true); // obex obj pushSystem.out.println("\nSearching for services...");agent.searchServices(null, uuidSet, remoteDevice, this);// avoid callback conflictstry {synchronized (lock) {lock.wait();}} catch (InterruptedException e) {e.printStackTrace();}// checkif (connectionURL == null) {System.out.println("Device does not support Service.");System.exit(0);}// connect to the serverStreamConnection streamConnection = null;try {System.out.println("Connected to server. \nNow start reading data from " + connectionURL);streamConnection = (StreamConnection) Connector.open(connectionURL);System.out.println("open connection ok!");InputStream inStream = streamConnection.openInputStream();//DataParser dParser = new DataParser(inStream);//dParser.Parse();Node node = new Node(inStream);node.readFromPort();} catch (Exception e) {e.printStackTrace();System.exit(0);}System.out.println("End connection to server.");}// methods of DiscoveryListenerpublic void deviceDiscovered(RemoteDevice btDevice, DeviceClass cod) {// add the device to the vectorif (!vecDevices.contains(btDevice)) {vecDevices.addElement(btDevice);}}// implement this method since services are not being discoveredpublic void servicesDiscovered(int transID, ServiceRecord[] servRecord) {if (servRecord != null && servRecord.length > 0) {connectionURL = servRecord[0].getConnectionURL(0, false);}synchronized (lock) {lock.notify();}}// implement this method since services are not being discoveredpublic void serviceSearchCompleted(int transID, int respCode) {synchronized (lock) {lock.notify();}}public void inquiryCompleted(int discType) {synchronized (lock) {lock.notify();}}// end method}


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 javax.bluetooth.*;import javax.microedition.io.*;/** * Class that implements an SPP Server which accepts single line of message from * an SPP client and sends a single line of response to the client. */public class SimpleSPPServer {/** * runs a bluetooth server that accepts a string from a client and sends a * response */public void runServer() throws IOException {// display local device address and nameLocalDevice localDevice = LocalDevice.getLocalDevice();System.out.println("Address: " + localDevice.getBluetoothAddress());System.out.println("Name: " + localDevice.getFriendlyName());// SimpleSPPServer sampleSPPServer = new SimpleSPPServer();// sampleSPPServer.startServer();this.startServer();} // runServer// start serverprivate void startServer() throws IOException {// Create a UUIDUUID uuid = new UUID("1101", true); // serial, SPP// UUID uuid = new UUID("1105", true); // obex obj push// UUID uuid = new UUID("0003", true); // rfcomm// UUID uuid = new UUID("1106", true); // obex file transfer// Create the service urlString connectionString = "btspp://localhost:" + uuid+ ";name=Sample SPP Server";// open server urlStreamConnectionNotifier streamConnNotifier = (StreamConnectionNotifier) Connector.open(connectionString);// Wait for client connectionSystem.out.println("\nServer Started. Waiting for clients to connect...");StreamConnection connection = streamConnNotifier.acceptAndOpen();// connectSystem.out.println("Connecting to client...");RemoteDevice dev = RemoteDevice.getRemoteDevice(connection);try {System.out.println("Remote device address: "+ dev.getBluetoothAddress());System.out.println("Remote device name: "+ dev.getFriendlyName(true));} catch (IOException ioe) {ioe.printStackTrace();}// read string from spp client// InputStream inStream = connection.openInputStream();// BufferedReader bReader = new BufferedReader(new// InputStreamReader(inStream));// String lineRead = bReader.readLine();// System.out.println("TEST"+lineRead);// read string from spp clientThread recvT = new Thread(new recvLoop(connection));recvT.start();// send response to spp client// OutputStream outStream = connection.openOutputStream();// PrintWriter pWriter = new PrintWriter(new// OutputStreamWriter(outStream));// pWriter.write("Response String from SPP Server\r\n");// pWriter.flush();// send response to spp client// Thread sendT = new Thread(new sendLoop(connection));// sendT.start();// close connection// pWriter.close();// streamConnNotifier.close();System.out.println("\nServer threads started");while (true) {try {Thread.sleep(2000);// System.out.println("\nServer looping.");} catch (InterruptedException e) {e.printStackTrace();}}} // startServerprivate static class recvLoop implements Runnable {private StreamConnection connection = null;private InputStream inStream = null;public recvLoop(StreamConnection c) {this.connection = c;try {this.inStream = this.connection.openInputStream();} catch (Exception e) {e.printStackTrace();}}@Overridepublic void run() {while (true) {try {BufferedReader bReader = new BufferedReader(new InputStreamReader(inStream));String lineRead = bReader.readLine();System.out.println("Server recv: " + lineRead);Thread.sleep(500);} catch (Exception e) {e.printStackTrace();}}}} // recvLoopprivate static class sendLoop implements Runnable {private StreamConnection connection = null;PrintWriter pWriter = null;public sendLoop(StreamConnection c) {this.connection = c;OutputStream outStream;try {outStream = this.connection.openOutputStream();this.pWriter = new PrintWriter(new OutputStreamWriter(outStream));} catch (IOException e) {e.printStackTrace();}}@Overridepublic void run() {while (true) {try {String line = "Response String from SPP Server\r\n"; // "\r\n"// importantpWriter.write(line);pWriter.flush();System.out.println("Server send: " + line);Thread.sleep(500);} catch (Exception e) {e.printStackTrace();}}}} // recvLoop} // class

import java.io.IOException;public class SprimeBT {        /**         * Main         *          * @param args         */        // main method of the application        public static void main(String[] args) throws IOException {                /*                 * Test bed for BT classes. Set to true/false for testing                 */                if (false) {                        // scan and print nearby bluetooth devices                        System.out.println("\n" + "Testing BT Device Discovery" + "\n");                        BluetoothDeviceDiscovery bluetoothDeviceDiscovery = new BluetoothDeviceDiscovery();                        bluetoothDeviceDiscovery.listDevices();                }                if (false) {                        // scan and print nearby bluetooth device services                        System.out.println("\n" + "Testing BT Service Discovery" + "\n");                        BluetoothServiceDiscovery bluetoothServiceDiscovery = new BluetoothServiceDiscovery();                        bluetoothServiceDiscovery.listServices();                }                if (false) {                        // start a bluetooth server                        System.out.println("\n" + "Testing BT Server" + "\n");                        SimpleSPPServer sppServer = new SimpleSPPServer();                        sppServer.runServer();                }                if (true) {                        // start a bluetooth client                        System.out.println("\n" + "Testing BT Client" + "\n");                        SimpleSPPClient sppClient = new SimpleSPPClient();                        sppClient.runClient();                }        }// end main}// end class


0 0
原创粉丝点击