All Downloads are FREE. Search and download functionalities are using the official Maven repository.

javax.bluetooth.DiscoveryAgent Maven / Gradle / Ivy

The newest version!
/**
 *  Java docs licensed under the Apache License, Version 2.0
 *  http://www.apache.org/licenses/LICENSE-2.0 
 *   (c) Copyright 2001, 2002 Motorola, Inc.  ALL RIGHTS RESERVED.
 *
 *
 *  @version $Id: DiscoveryAgent.java 1379 2007-10-13 02:00:43Z vlads $
 */ 

package javax.bluetooth;

/**
 * The DiscoveryAgent class provides methods to perform
 * device and service discovery.  A local device must have only one
 * DiscoveryAgent object.  This object must be retrieved
 * by a call to getDiscoveryAgent() on the
 * LocalDevice object.
 *
 * 

Device Discovery

* * There are two ways to discover devices. First, an application may * use startInquiry() to start an inquiry to find devices * in proximity to the local device. Discovered devices are returned * via the deviceDiscovered() method of the interface * DiscoveryListener. The second way to * discover devices is via the retrieveDevices() method. * This method will return devices that have been discovered via a * previous inquiry or devices that are classified as pre-known. * (Pre-known devices are those devices that are defined in the * Bluetooth Control Center as devices this device frequently contacts.) * The retrieveDevices() method does not perform an * inquiry, but provides a quick way to get a list of devices that may * be in the area. * *

Service Discovery

* The DiscoveryAgent class also encapsulates the * functionality provided by the service discovery application profile. * The class provides an interface for an application to search and * retrieve attributes for a particular service. There are two ways to * search for services. To search for a service on a single device, * the searchServices() method should be used. On the * other hand, if you don't care which device a service is on, the * selectService() method does a service search on a * set of remote devices. * * * @version 1.0 February 11, 2002 * */ public class DiscoveryAgent { /** * Takes the device out of discoverable mode. *

* The value of NOT_DISCOVERABLE is 0x00 (0). */ public static final int NOT_DISCOVERABLE = 0; /** * The inquiry access code for General/Unlimited Inquiry Access Code * (GIAC). This is used to specify the type of inquiry to complete or * respond to. *

* The value of GIAC is 0x9E8B33 (10390323). This value * is defined in the Bluetooth Assigned Numbers document. */ public static final int GIAC = 0x9E8B33; /** * The inquiry access code for Limited Dedicated Inquiry Access Code * (LIAC). This is used to specify the type of inquiry to complete or * respond to. *

* The value of LIAC is 0x9E8B00 (10390272). This value * is defined in the Bluetooth Assigned Numbers document. */ public static final int LIAC = 0x9E8B00; /** * Used with the retrieveDevices() method to return * those devices that were found via a previous inquiry. If no * inquiries have been started, this will cause the method to return * null. *

* The value of CACHED is 0x00 (0). * * @see #retrieveDevices */ public static final int CACHED = 0x00; /** * Used with the retrieveDevices() method to return * those devices that are defined to be pre-known devices. Pre-known * devices are specified in the BCC. These are devices that are * specified by the user as devices with which the local device will * frequently communicate. *

* The value of PREKNOWN is 0x01 (1). * * @see #retrieveDevices */ public static final int PREKNOWN = 0x01; /** * Creates a DiscoveryAgent object. */ private DiscoveryAgent() { } /** * Returns an array of Bluetooth devices that have either been found * by the local device during previous inquiry requests or been * specified as a pre-known device depending on the argument. The list * of previously found devices is maintained by the implementation of * this API. (In other words, maintenance of the list of previously * found devices is an implementation detail.) A device can be set as * a pre-known device in the Bluetooth Control Center. * * @param option CACHED if previously found devices * should be returned; PREKNOWN if pre-known devices * should be returned * * @return an array containing the Bluetooth devices that were * previously found if option is CACHED; * an array of devices that are pre-known devices if * option is PREKNOWN; null * if no devices meet the criteria * * @exception IllegalArgumentException if option is * not CACHED or PREKNOWN */ public RemoteDevice[] retrieveDevices(int option) { return null; } /** * Places the device into inquiry mode. The length of the inquiry is * implementation dependent. This method will search for devices with the * specified inquiry access code. Devices that responded to the inquiry * are returned to the application via the method * deviceDiscovered() of the interface * DiscoveryListener. The cancelInquiry() * method is called to stop the inquiry. * * @see #cancelInquiry * @see #GIAC * @see #LIAC * * @param accessCode the type of inquiry to complete * * @param listener the event listener that will receive device * discovery events * * @return true if the inquiry was started; * false if the inquiry was not started because the * accessCode is not supported * * @exception IllegalArgumentException if the access code provided * is not LIAC, GIAC, or in the range * 0x9E8B00 to 0x9E8B3F * * @exception NullPointerException if listener is * null * * @exception BluetoothStateException if the Bluetooth device does * not allow an inquiry to be started due to other operations that are being * performed by the device */ public boolean startInquiry(int accessCode, DiscoveryListener listener) throws BluetoothStateException { if (listener == null) { throw new NullPointerException("DiscoveryListener is null"); } if ((accessCode != LIAC) && (accessCode != GIAC) && ((accessCode < 0x9E8B00) || (accessCode > 0x9E8B3F))) { throw new IllegalArgumentException("Invalid accessCode " + accessCode); } return false; } /** * Removes the device from inquiry mode. *

* An inquiryCompleted() event will occur with a type of * INQUIRY_TERMINATED as a result of calling this * method. After receiving this * event, no further deviceDiscovered() events will occur * as a result of this inquiry. * *

* * This method will only cancel the inquiry if the * listener provided is the listener that started * the inquiry. * * @param listener the listener that is receiving inquiry events * * @return true if the inquiry was canceled; otherwise * false if the inquiry was not canceled or if the inquiry * was not started using listener * * @exception NullPointerException if listener is * null */ public boolean cancelInquiry(DiscoveryListener listener) { if (listener == null) { throw new NullPointerException("DiscoveryListener is null"); } return false; } /** * Searches for services on a remote Bluetooth device that have all the * UUIDs specified in uuidSet. Once the service is found, * the attributes specified in attrSet and the default * attributes are retrieved. The default attributes are * ServiceRecordHandle (0x0000), ServiceClassIDList * (0x0001), ServiceRecordState (0x0002), ServiceID (0x0003), and * ProtocolDescriptorList (0x0004).If attrSet is * null then only the default attributes will be retrieved. * attrSet does not have to be sorted in increasing order, * but must only contain values in the range [0 - (216-1)]. * * @see DiscoveryListener * * @param attrSet indicates the attributes whose values will be * retrieved on services which have the UUIDs specified in * uuidSet * * @param uuidSet the set of UUIDs that are being searched for; all * services returned will contain all the UUIDs specified here * * @param btDev the remote Bluetooth device to search for services on * * @param discListener the object that will receive events when * services are discovered * * @return the transaction ID of the service search; this number * must be positive * * @exception BluetoothStateException if the number of concurrent * service search transactions exceeds the limit specified by the * bluetooth.sd.trans.max property obtained from the * class LocalDevice or the system is unable to start * one due to current conditions * * @exception IllegalArgumentException if attrSet has * an illegal service attribute ID or exceeds the property * bluetooth.sd.attr.retrievable.max * defined in the class LocalDevice; if * attrSet * or uuidSet is of length 0; if attrSet * or uuidSet contains duplicates * * @exception NullPointerException if uuidSet, * btDev, or discListener is * null; if an element in uuidSet array is * null * */ public int searchServices(int[] attrSet, UUID[] uuidSet, RemoteDevice btDev, DiscoveryListener discListener) throws BluetoothStateException { if (uuidSet == null) { throw new NullPointerException("uuidSet is null"); } if (uuidSet.length == 0) { // The same as on Motorola, Nokia and SE Phones throw new IllegalArgumentException("uuidSet is empty"); } for (int u1 = 0; u1 < uuidSet.length; u1++) { for (int u2 = u1 + 1; u2 < uuidSet.length; u2++) { if (uuidSet[u1].equals(uuidSet[u2])) { throw new IllegalArgumentException("uuidSet has duplicate values " + uuidSet[u1].toString()); } } } if (btDev == null) { throw new NullPointerException("RemoteDevice is null"); } if (discListener == null) { throw new NullPointerException("DiscoveryListener is null"); } for (int i = 0; attrSet != null && i < attrSet.length; i++) { if (attrSet[i] < 0x0000 || attrSet[i] > 0xffff) { throw new IllegalArgumentException("attrSet[" + i + "] not in range"); } } return 0; } /** * Cancels the service search transaction that has the specified * transaction ID. The ID was assigned to the transaction by the * method searchServices(). A * serviceSearchCompleted() event with a discovery type * of SERVICE_SEARCH_TERMINATED will occur when * this method is called. After receiving this event, no further * servicesDiscovered() events will occur as a result * of this search. * * @param transID the ID of the service search transaction to * cancel; returned by searchServices() * * @return true if the service search transaction is * terminated, else false if the transID * does not represent an active service search transaction */ public boolean cancelServiceSearch(int transID) { return false; } /** * Attempts to locate a service that contains uuid in * the ServiceClassIDList of its service record. This * method will return a string that may be used in * Connector.open() to establish a connection to the * service. How the service is selected if there are multiple services * with uuid and which devices to * search is implementation dependent. * * @see ServiceRecord#NOAUTHENTICATE_NOENCRYPT * @see ServiceRecord#AUTHENTICATE_NOENCRYPT * @see ServiceRecord#AUTHENTICATE_ENCRYPT * * @param uuid the UUID to search for in the ServiceClassIDList * * @param security specifies the security requirements for a connection * to this service; must be one of * ServiceRecord.NOAUTHENTICATE_NOENCRYPT, * ServiceRecord.AUTHENTICATE_NOENCRYPT, or * ServiceRecord.AUTHENTICATE_ENCRYPT * * @param master determines if this client must be the master of the * connection; true if the client must be the master; * false if the client can be the master or the slave * * @return the connection string used to connect to the service * with a UUID of uuid; or null if no * service could be found with a UUID of uuid in the * ServiceClassIDList * * @exception BluetoothStateException if the Bluetooth system cannot * start the request due to the current state of the Bluetooth system * * @exception NullPointerException if uuid is * null * * @exception IllegalArgumentException if security is * not ServiceRecord.NOAUTHENTICATE_NOENCRYPT, * ServiceRecord.AUTHENTICATE_NOENCRYPT, or * ServiceRecord.AUTHENTICATE_ENCRYPT */ public String selectService(UUID uuid, int security, boolean master) throws BluetoothStateException { return null; } }





© 2015 - 2024 Weber Informatics LLC | Privacy Policy