QBluetoothServiceDiscoveryAgent Class
The QBluetoothServiceDiscoveryAgent class enables you to query for Bluetooth services. More...
Header: | #include <QBluetoothServiceDiscoveryAgent> |
qmake: | QT += bluetooth |
Public Types
enum | DiscoveryMode { MinimalDiscovery, FullDiscovery } |
enum | Error { NoError, PoweredOffError, InputOutputError, InvalidBluetoothAdapterError, UnknownError } |
Public Functions
QBluetoothServiceDiscoveryAgent(QObject * parent = 0) | |
QBluetoothServiceDiscoveryAgent(const QBluetoothAddress & deviceAdapter, QObject * parent = 0) | |
~QBluetoothServiceDiscoveryAgent() | |
QList<QBluetoothServiceInfo> | discoveredServices() const |
Error | error() const |
QString | errorString() const |
bool | isActive() const |
QBluetoothAddress | remoteAddress() const |
bool | setRemoteAddress(const QBluetoothAddress & address) |
void | setUuidFilter(const QList<QBluetoothUuid> & uuids) |
void | setUuidFilter(const QBluetoothUuid & uuid) |
QList<QBluetoothUuid> | uuidFilter() const |
Public Slots
void | clear() |
void | start(DiscoveryMode mode = MinimalDiscovery) |
void | stop() |
Signals
void | canceled() |
void | error(QBluetoothServiceDiscoveryAgent::Error error) |
void | finished() |
void | serviceDiscovered(const QBluetoothServiceInfo & info) |
Detailed Description
The QBluetoothServiceDiscoveryAgent class enables you to query for Bluetooth services.
To query the services provided by all contactable Bluetooth devices:
- create an instance of QBluetoothServiceDiscoveryAgent,
- connect to either the serviceDiscovered() or finished() signals,
- and call start().
void MyClass::startServiceDiscovery() { // Create a discovery agent and connect to its signals QBluetoothServiceDiscoveryAgent *discoveryAgent = new QBluetoothServiceDiscoveryAgent(this); connect(discoveryAgent, SIGNAL(serviceDiscovered(QBluetoothServiceInfo)), this, SLOT(serviceDiscovered(QBluetoothServiceInfo))); // Start a discovery discoveryAgent->start(); //... } // In your local slot, read information about the found devices void MyClass::serviceDiscovered(const QBluetoothServiceInfo &service) { qDebug() << "Found new service:" << service.serviceName() << '(' << service.device().address().toString() << ')'; }
By default a minimal service discovery is performed. In this mode, the QBluetotohServiceInfo objects returned are guaranteed to contain only device and service UUID information. Depending on platform and device capabilities, other service information may also be available. For most use cases this is adequate as QBluetoothSocket::connectToService() will perform additional discovery if required. If full service information is required, pass FullDiscovery as the discoveryMode parameter to start().
This class may internally utilize QBluetoothDeviceDiscoveryAgent to find unknown devices.
See also QBluetoothDeviceDiscoveryAgent.
Member Type Documentation
enum QBluetoothServiceDiscoveryAgent::DiscoveryMode
This enum describes the service discovery mode.
Constant | Value | Description |
---|---|---|
QBluetoothServiceDiscoveryAgent::MinimalDiscovery | 0 | Performs a minimal service discovery. The QBluetoothServiceInfo objects returned may be incomplete and are only guaranteed to contain device and service UUID information. |
QBluetoothServiceDiscoveryAgent::FullDiscovery | 1 | Performs a full service discovery. |
enum QBluetoothServiceDiscoveryAgent::Error
This enum describes errors that can occur during service discovery.
Constant | Value | Description |
---|---|---|
QBluetoothServiceDiscoveryAgent::NoError | QBluetoothDeviceDiscoveryAgent::NoError | No error has occurred. |
QBluetoothServiceDiscoveryAgent::PoweredOffError | QBluetoothDeviceDiscoveryAgent::PoweredOffError | The Bluetooth adaptor is powered off, power it on before doing discovery. |
QBluetoothServiceDiscoveryAgent::InputOutputError | QBluetoothDeviceDiscoveryAgent::InputOutputError | Writing or reading from the device resulted in an error. |
QBluetoothServiceDiscoveryAgent::InvalidBluetoothAdapterError | QBluetoothDeviceDiscoveryAgent::InvalidBluetoothAdapterError | The passed local adapter address does not match the physical adapter address of any local Bluetooth device. |
QBluetoothServiceDiscoveryAgent::UnknownError | QBluetoothDeviceDiscoveryAgent::UnknownError | An unknown error has occurred. |
Member Function Documentation
QBluetoothServiceDiscoveryAgent::QBluetoothServiceDiscoveryAgent(QObject * parent = 0)
Constructs a new QBluetoothServiceDiscoveryAgent with parent. The search is performed via the local default Bluetooth adapter.
QBluetoothServiceDiscoveryAgent::QBluetoothServiceDiscoveryAgent(const QBluetoothAddress & deviceAdapter, QObject * parent = 0)
Constructs a new QBluetoothServiceDiscoveryAgent for deviceAdapter and with parent.
It uses deviceAdapter for the service search. If deviceAdapter is default constructed the resulting QBluetoothServiceDiscoveryAgent object will use the local default Bluetooth adapter.
If a deviceAdapter is specified that is not a local adapter error() will be set to InvalidBluetoothAdapterError. Therefore it is recommended to test the error flag immediately after using this constructor.
See also error().
QBluetoothServiceDiscoveryAgent::~QBluetoothServiceDiscoveryAgent()
Destructor for QBluetoothServiceDiscoveryAgent
void QBluetoothServiceDiscoveryAgent::canceled() [signal]
This signal is triggered when the service discovery was canceled via a call to stop().
void QBluetoothServiceDiscoveryAgent::clear() [slot]
Clears the results of previous service discoveries and resets uuidFilter(). This function does nothing during an ongoing service discovery (see isActive()).
See also discoveredServices().
QList<QBluetoothServiceInfo> QBluetoothServiceDiscoveryAgent::discoveredServices() const
Returns the list of all discovered services.
This list of services accumulates newly discovered services from multiple calls to start(). Unless clear() is called the list cannot decrease in size. This implies that if a remote Bluetooth device moves out of range in between two subsequent calls to start() the list may contain stale entries.
See also clear().
Error QBluetoothServiceDiscoveryAgent::error() const
Returns the type of error that last occurred. If the service discovery is done for a single remoteAddress() it will return errors that occurred while trying to discover services on that device. If the remoteAddress() is not set and devices are discovered by a scan, errors during service discovery on individual devices are not saved and no signals are emitted. In this case, errors are fairly normal as some devices may not respond to discovery or may no longer be in range. Such errors are surpressed. If no services are returned, it can be assumed no services could be discovered.
void QBluetoothServiceDiscoveryAgent::error(QBluetoothServiceDiscoveryAgent::Error error) [signal]
This signal is emitted when an error occurs. The error parameter describes the error that occurred.
QString QBluetoothServiceDiscoveryAgent::errorString() const
Returns a human-readable description of the last error that occurred during the service discovery.
void QBluetoothServiceDiscoveryAgent::finished() [signal]
This signal is emitted when the Bluetooth service discovery completes.
Unlike the QBluetoothDeviceDiscoveryAgent::finished() signal this signal will even be emitted when an error occurred during the service discovery. Therefore it is recommended to check the error() signal to evaluate the success of the service discovery discovery.
bool QBluetoothServiceDiscoveryAgent::isActive() const
Returns true if the service discovery is currently active; otherwise returns false. An active discovery can be stopped by calling stop().
QBluetoothAddress QBluetoothServiceDiscoveryAgent::remoteAddress() const
Returns the remote device address. If setRemoteAddress() is not called, the function will return a default constructed QBluetoothAddress.
See also setRemoteAddress().
void QBluetoothServiceDiscoveryAgent::serviceDiscovered(const QBluetoothServiceInfo & info) [signal]
This signal is emitted when the Bluetooth service described by info is discovered.
bool QBluetoothServiceDiscoveryAgent::setRemoteAddress(const QBluetoothAddress & address)
Sets the remote device address to address. If address is default constructed, services will be discovered on all contactable Bluetooth devices. A new remote address can only be set while there is no service discovery in progress; otherwise this function returns false.
On some platforms such as Blackberry the service discovery might lead to pairing requests. Therefore it is not recommended to do service discoveries on all devices.
See also remoteAddress().
void QBluetoothServiceDiscoveryAgent::setUuidFilter(const QList<QBluetoothUuid> & uuids)
Sets the UUID filter to uuids. Only services matching the UUIDs in uuids will be returned.
An empty UUID list is equivalent to a list containing only QBluetoothUuid::PublicBrowseGroup.
See also uuidFilter().
void QBluetoothServiceDiscoveryAgent::setUuidFilter(const QBluetoothUuid & uuid)
This is an overloaded member function, provided for convenience.
Sets the UUID filter to a list containing the single element uuid.
See also uuidFilter().
void QBluetoothServiceDiscoveryAgent::start(DiscoveryMode mode = MinimalDiscovery) [slot]
Starts service discovery. mode specifies the type of service discovery to perform.
On BlackBerry devices, device discovery may lead to pairing requests.
See also DiscoveryMode.
void QBluetoothServiceDiscoveryAgent::stop() [slot]
Stops the service discovery process. The canceled() signal will be emitted once the search has stopped.
QList<QBluetoothUuid> QBluetoothServiceDiscoveryAgent::uuidFilter() const
Returns the UUID filter.
See also setUuidFilter().