public class DiscoveryAgent
extends java.lang.Object
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.Modifier and Type | Field and Description |
---|---|
static int |
CACHED
Used with the
retrieveDevices() method to return those devices that were found via a previous
inquiry. |
static int |
GIAC
The inquiry access code for General/Unlimited Inquiry Access Code (GIAC).
|
static int |
LIAC
The inquiry access code for Limited Dedicated Inquiry Access Code (LIAC).
|
static int |
NOT_DISCOVERABLE
Takes the device out of discoverable mode.
|
static int |
PREKNOWN
Used with the
retrieveDevices() method to return those devices that are defined to be pre-known
devices. |
Modifier and Type | Method and Description |
---|---|
boolean |
cancelInquiry(DiscoveryListener listener)
Removes the device from inquiry mode.
|
boolean |
cancelServiceSearch(int transID)
Cancels the service search transaction that has the specified transaction ID.
|
RemoteDevice[] |
retrieveDevices(int option)
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.
|
int |
searchServices(int[] attrSet,
UUID[] uuidSet,
RemoteDevice btDev,
DiscoveryListener discListener)
Searches for services on a remote Bluetooth device that have all the UUIDs specified in
uuidSet . |
java.lang.String |
selectService(UUID uuid,
int security,
boolean master)
Attempts to locate a service that contains
uuid in the ServiceClassIDList of its service record. |
boolean |
startInquiry(int accessCode,
DiscoveryListener listener)
Places the device into inquiry mode.
|
public static final int CACHED
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).
public static final int GIAC
The value of GIAC
is 0x9E8B33 (10390323). This value is defined in the Bluetooth Assigned Numbers
document.
public static final int LIAC
The value of LIAC
is 0x9E8B00 (10390272). This value is defined in the Bluetooth Assigned Numbers
document.
public static final int NOT_DISCOVERABLE
The value of NOT_DISCOVERABLE
is 0x00 (0).
public static final int PREKNOWN
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).
public boolean cancelInquiry(DiscoveryListener listener)
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.
listener
- the listener that is receiving inquiry eventstrue
if the inquiry was canceled; otherwise false
if the inquiry was not
canceled or if the inquiry was not started using listener
java.lang.NullPointerException
- if listener
is null
public boolean cancelServiceSearch(int transID)
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.
Not implemented on Android and Windows CE.transID
- the ID of the service search transaction to cancel; returned by searchServices()
true
if the service search transaction is terminated, else false
if
transID
does not represent an active service search transactionpublic RemoteDevice[] retrieveDevices(int option)
option
- option
- CACHED
if previously found devices should be returned;
PREKNOWN
if pre-known devices should be returnedoption
is
CACHED
; an array of devices that are pre-known devices if option
is
PREKNOWN
; null
if no devices meet the criteriajava.lang.IllegalArgumentException
- if option
is not CACHED
or PREKNOWN
public int searchServices(int[] attrSet, UUID[] uuidSet, RemoteDevice btDev, DiscoveryListener discListener) throws IOException
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)].
Not implemented on Android.attrSet
- indicates the attributes whose values will be retrieved on services which have the UUIDs specified in
uuidSet
uuidSet
- the set of UUIDs that are being searched for; all services returned will contain all the UUIDs specified
herebtDev
- the remote Bluetooth device to search for services ondiscListener
- the object that will receive events when services are discoveredjava.lang.NullPointerException
- if uuidSet
, btDev
, or discListener
is null
; if an
element in uuidSet
array is null
java.lang.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 duplicatesIOException
- 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 conditionspublic java.lang.String selectService(UUID uuid, int security, boolean master) throws IOException
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.
Not implemented on Android.uuid
- the UUID to search for in the ServiceClassIDListsecurity
- specifies the security requirements for a connection to this service; must be one of
ServiceRecord.NOAUTHENTICATE_NOENCRYPT
, ServiceRecord.AUTHENTICATE_NOENCRYPT
,
or ServiceRecord.AUTHENTICATE_ENCRYPT
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 slaveuuid
; or
null
if no service could be found with a UUID of uuid
in the ServiceClassIDListjava.lang.NullPointerException
- if uuid
is null
java.lang.IllegalArgumentException
- if security
is not ServiceRecord.NOAUTHENTICATE_NOENCRYPT
,
ServiceRecord.AUTHENTICATE_NOENCRYPT
, or ServiceRecord.AUTHENTICATE_ENCRYPT
IOException
- if the Bluetooth system cannot start the request due to the current state of the Bluetooth systempublic boolean startInquiry(int accessCode, DiscoveryListener listener) throws IOException
deviceDiscovered()
of the interface DiscoveryListener
.
The cancelInquiry()
method is called to stop the inquiry.
Not implemented on Android.accessCode
- the type of inquiry to completelistener
- the event listener that will receive device discovery eventstrue
if the inquiry was started; false
if the inquiry was not started because
the accessCode
is not supportedjava.lang.IllegalArgumentException
- if the access code provided is not LIAC
, GIAC
, or in the range 0x9E8B00 to
0x9E8B3Fjava.lang.NullPointerException
- if listener
is null
IOException
- if the Bluetooth device does not allow an inquiry to be started due to other operations that are being
performed by the device