QBluetoothServiceDiscoveryAgent Class

The QBluetoothServiceDiscoveryAgent class enables you to query for Bluetooth services. 更多...

头: #include <QBluetoothServiceDiscoveryAgent>
qmake: QT += bluetooth
Since: Qt 5.2
继承: QObject

公共类型

enum DiscoveryMode { MinimalDiscovery, FullDiscovery }
enum Error { NoError, PoweredOffError, InputOutputError, InvalidBluetoothAdapterError, UnknownError }

公共函数

QBluetoothServiceDiscoveryAgent (QObject * parent = Q_NULLPTR)
QBluetoothServiceDiscoveryAgent (const QBluetoothAddress & deviceAdapter , QObject * parent = Q_NULLPTR)
~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

公共槽

void clear ()
void start (DiscoveryMode mode = MinimalDiscovery)
void stop ()

信号

void canceled ()
void error (QBluetoothServiceDiscoveryAgent::Error error )
void finished ()
void serviceDiscovered (const QBluetoothServiceInfo & info )

额外继承成员

详细描述

The QBluetoothServiceDiscoveryAgent class enables you to query for Bluetooth services.

The discovery process relies on the Bluetooth Service Discovery Process (SDP). The following steps are required to query the services provided by all contactable Bluetooth devices:

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 returned QBluetoothServiceInfo objects are guaranteed to contain only device and service UUID information. Depending on platform and device capabilities, other service information may also be available. The minimal service discovery mode relies on cached SDP data of the platform. Therefore it is possible that this discovery does not find a device although it is physically available. In such cases a full discovery must be performed to force an update of the platform cache. However for most use cases a minimal discovery is adequate as it is much quicker and other classes which require up-to-date information such as QBluetoothSocket::connectToService () will perform additional discovery if required. If the full service information is required, pass FullDiscovery as the discoveryMode parameter to start ().

This class may internally utilize QBluetoothDeviceDiscoveryAgent to find unknown devices.

The service discovery may find Bluetooth Low Energy services too if the target device is a combination of a classic and Low Energy device. Those devices are required to advertise their Low Energy services via SDP. If the target device only supports Bluetooth Low Energy services, it is likely to not advertise them via SDP. The QLowEnergyController class should be utilized to perform the service discovery on Low Energy devices.

另请参阅 QBluetoothDeviceDiscoveryAgent and QLowEnergyController .

成员类型文档编制

enum QBluetoothServiceDiscoveryAgent:: DiscoveryMode

This enum describes the service discovery mode.

常量 描述
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. Since a minimal discovery relies on cached SDP data it may not find a physically existing device until a FullDiscovery 的履行。
QBluetoothServiceDiscoveryAgent::FullDiscovery 1 Performs a full service discovery.

enum QBluetoothServiceDiscoveryAgent:: Error

This enum describes errors that can occur during service discovery.

常量 描述
QBluetoothServiceDiscoveryAgent::NoError QBluetoothDeviceDiscoveryAgent::NoError 没有出现错误。
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. This value was introduced by Qt 5.3.
QBluetoothServiceDiscoveryAgent::UnknownError QBluetoothDeviceDiscoveryAgent::UnknownError 出现未知错误。

成员函数文档编制

QBluetoothServiceDiscoveryAgent:: QBluetoothServiceDiscoveryAgent ( QObject * parent = Q_NULLPTR)

构造新的 QBluetoothServiceDiscoveryAgent with parent . The search is performed via the local default Bluetooth adapter.

QBluetoothServiceDiscoveryAgent:: QBluetoothServiceDiscoveryAgent (const QBluetoothAddress & deviceAdapter , QObject * parent = Q_NULLPTR)

构造新的 QBluetoothServiceDiscoveryAgent for deviceAdapter 和采用 parent .

它使用 deviceAdapter for the service search. If deviceAdapter is default constructed the resulting QBluetoothServiceDiscoveryAgent object will use the local default Bluetooth adapter.

deviceAdapter is specified that is not a local adapter error () 会被设为 InvalidBluetoothAdapterError . Therefore it is recommended to test the error flag immediately after using this constructor.

注意: On WinRT the passed adapter address will be ignored.

另请参阅 error ().

QBluetoothServiceDiscoveryAgent:: ~QBluetoothServiceDiscoveryAgent ()

析构函数为 QBluetoothServiceDiscoveryAgent

[signal] void QBluetoothServiceDiscoveryAgent:: canceled ()

This signal is triggered when the service discovery was canceled via a call to stop ().

[slot] void QBluetoothServiceDiscoveryAgent:: clear ()

Clears the results of previous service discoveries and resets uuidFilter (). This function does nothing during an ongoing service discovery (see isActive ()).

另请参阅 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.

注意: The list of services should always be cleared before the discovery mode is changed.

另请参阅 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.

[signal] void QBluetoothServiceDiscoveryAgent:: error ( QBluetoothServiceDiscoveryAgent::Error error )

此信号被发射当 error occurs. The error parameter describes the error that occurred.

注意: 信号 error 在此类中是重载。要使用函数指针句法连接到此信号,必须在静态铸造中指定信号类型,如此范例所示:

connect(bluetoothServiceDiscoveryAgent, static_cast<void(QBluetoothServiceDiscoveryAgent::*)(QBluetoothServiceDiscoveryAgent::Error)>(&QBluetoothServiceDiscoveryAgent::error),
    [=](QBluetoothServiceDiscoveryAgent::Error error){ /* ... */ });
					

QString QBluetoothServiceDiscoveryAgent:: errorString () const

Returns a human-readable description of the last error that occurred during the service discovery.

[signal] void QBluetoothServiceDiscoveryAgent:: finished ()

This signal is emitted when the Bluetooth service discovery completes.

不像 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

返回 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 .

另请参阅 setRemoteAddress ().

[signal] void QBluetoothServiceDiscoveryAgent:: serviceDiscovered (const QBluetoothServiceInfo & info )

This signal is emitted when the Bluetooth service described by info is discovered.

注意: The passed QBluetoothServiceInfo parameter may contain a Bluetooth Low Energy service if the target device advertises the service via SDP. This is required from device which support both, classic Bluetooth (BaseRate) and Low Energy services.

另请参阅 QBluetoothDeviceInfo::coreConfigurations ().

bool QBluetoothServiceDiscoveryAgent:: setRemoteAddress (const QBluetoothAddress & address )

Sets the remote device address to address 。若 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 the service discovery might lead to pairing requests. Therefore it is not recommended to do service discoveries on all devices. This function can be used to restrict the service discovery to a particular device.

另请参阅 remoteAddress ().

void QBluetoothServiceDiscoveryAgent:: setUuidFilter (const QList < QBluetoothUuid > & uuids )

Sets the UUID filter to uuids . Only services matching the UUIDs in uuids will be returned. The matching applies to the service's ServiceId and ServiceClassIds 属性。

An empty UUID list is equivalent to a list containing only QBluetoothUuid::PublicBrowseGroup .

另请参阅 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 . The matching applies to the service's ServiceId and ServiceClassIds 属性。

另请参阅 uuidFilter ().

[slot] void QBluetoothServiceDiscoveryAgent:: start ( DiscoveryMode mode = MinimalDiscovery)

Starts service discovery. mode specifies the type of service discovery to perform.

On some platforms, device discovery may lead to pairing requests.

另请参阅 DiscoveryMode .

[slot] void QBluetoothServiceDiscoveryAgent:: stop ()

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.

另请参阅 setUuidFilter ().