Класс QBluetoothServiceDiscoveryAgent
Класс QBluetoothServiceDiscoveryAgent позволяет выполнять поиск Bluetooth-сервисов. Подробнее...
| Заголовок: | #include <QBluetoothServiceDiscoveryAgent> |
| qmake: | QT += bluetooth |
| С тех пор: | Qt 5.2 |
| Наследует: | QObject |
Открытые типы
| перечисление | DiscoveryMode { MinimalDiscovery, FullDiscovery } |
| перечисление | 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 |
- 31 открытая функция унаследованная от QObject
Открытые слоты
| void | clear() |
| void | start(DiscoveryMode mode = MinimalDiscovery) |
| void | stop() |
- 1 открытый слот унаследованный от QObject
Сигналы
| void | canceled() |
| void | error(QBluetoothServiceDiscoveryAgent::Error error) |
| void | finished() |
| void | serviceDiscovered(const QBluetoothServiceInfo &info) |
- 2 сигнала унаследованных от QObject
Дополнительные унаследованные члены
- 1 свойство унаследованное от QObject
- 11 статические открытые члены унаследованные от QObject
- 9 защищенные функции унаследованные от QObject
Подробное описание
Класс QBluetoothServiceDiscoveryAgent позволяет выполнять поиск Bluetooth-сервисов.
Процесс поиска опирается на процесс открытия Bluetooth-сервисов (SDP). Для поиска сервисов, предоставляемых всеми доступными Bluetooth-устройствами, необходимо выполнить следующие шаги:
- создать экземпляр QBluetoothServiceDiscoveryAgent,
- подключиться к сигналам serviceDiscovered() или finished(),
- и вызвать 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() << ')';
} По умолчанию выполняется минимальный поиск сервисов. В этом режиме возвращаемые объекты QBluetoothServiceInfo гарантированно содержат только информацию об устройстве и UUID сервиса. В зависимости от платформы и возможностей устройства, может быть доступна и другая информация о сервисе. Минимальный поиск сервисов использует кэшированные данные SDP платформы. Поэтому возможно, что при таком поиске устройство не будет найдено, даже если оно физически доступно. В таких случаях для принудительного обновления кэша платформы необходимо выполнить полный поиск. Однако в большинстве случаев минимальный поиск достаточен, так как он намного быстрее, и другие классы, которые требуют актуальной информации, такие как QBluetoothSocket::connectToService(), выполнят дополнительный поиск при необходимости. Если требуется полная информация о сервисе, передайте FullDiscovery в качестве параметра discoveryMode для start().
Этот класс может использовать QBluetoothDeviceDiscoveryAgent для поиска неизвестных устройств.
Поиск сервисов может также находить сервисы Bluetooth Low Energy, если целевое устройство является комбинацией классического и Low Energy устройства. Эти устройства должны рекламировать свои сервисы Low Energy через SDP. Если целевое устройство поддерживает только сервисы Bluetooth Low Energy, то, скорее всего, оно не будет рекламировать их через SDP. Для поиска сервисов на устройствах Low Energy следует использовать класс QLowEnergyController.
См. также QBluetoothDeviceDiscoveryAgent и QLowEnergyController.
Документация по типам членов
перечисление QBluetoothServiceDiscoveryAgent::DiscoveryMode
Это перечисление описывает режим поиска сервисов.
| Константа | Значение | Описание |
|---|---|---|
QBluetoothServiceDiscoveryAgent::MinimalDiscovery |
0 |
Выполняет минимальный поиск сервисов. Возвращаемые объекты QBluetoothServiceInfo могут быть неполными и гарантированно содержат только информацию об устройстве и UUID сервиса. Поскольку минимальный поиск использует кэшированные данные SDP, он может не найти физически существующее устройство, пока не выполняется FullDiscovery. |
QBluetoothServiceDiscoveryAgent::FullDiscovery |
1 |
Выполняет полный поиск сервисов. |
перечисление QBluetoothServiceDiscoveryAgent::Error
Это перечисление описывает ошибки, которые могут произойти во время поиска сервисов.
| Константа | Значение | Описание |
|---|---|---|
QBluetoothServiceDiscoveryAgent::NoError |
QBluetoothDeviceDiscoveryAgent::NoError |
Ошибка не произошла. |
QBluetoothServiceDiscoveryAgent::PoweredOffError |
QBluetoothDeviceDiscoveryAgent::PoweredOffError |
Bluetooth-адаптер выключен, включите его перед поиском. |
QBluetoothServiceDiscoveryAgent::InputOutputError |
QBluetoothDeviceDiscoveryAgent::InputOutputError |
Ошибка при чтении или записи с устройства. |
QBluetoothServiceDiscoveryAgent::InvalidBluetoothAdapterError |
QBluetoothDeviceDiscoveryAgent::InvalidBluetoothAdapterError |
Переданный адрес локального адаптера не соответствует физическому адресу адаптера локального Bluetooth-устройства. Это значение было введено в Qt 5.3. |
QBluetoothServiceDiscoveryAgent::UnknownError |
QBluetoothDeviceDiscoveryAgent::UnknownError |
Произошла неизвестная ошибка. |
Документация по функциям-членам
QBluetoothServiceDiscoveryAgent::QBluetoothServiceDiscoveryAgent(QObject *parent = Q_NULLPTR)
Создаёт новый объект QBluetoothServiceDiscoveryAgent с parent. Поиск выполняется через локальный адаптер Bluetooth по умолчанию.
QBluetoothServiceDiscoveryAgent::QBluetoothServiceDiscoveryAgent(const QBluetoothAddress &deviceAdapter, QObject *parent = Q_NULLPTR)
Создаёт новый объект QBluetoothServiceDiscoveryAgent для deviceAdapter с parent.
Использует deviceAdapter для поиска служб. Если deviceAdapter создан по умолчанию, то создаваемый объект QBluetoothServiceDiscoveryAgent будет использовать локальный адаптер Bluetooth по умолчанию.
Если заданный deviceAdapter не является локальным адаптером, то error() будет установлено в InvalidBluetoothAdapterError. Поэтому рекомендуется сразу проверить флаг ошибки после использования этого конструктора.
См. также error().
QBluetoothServiceDiscoveryAgent::~QBluetoothServiceDiscoveryAgent()
Деструктор для QBluetoothServiceDiscoveryAgent
[signal] void QBluetoothServiceDiscoveryAgent::canceled()
Этот сигнал генерируется, когда поиск служб был отменён вызовом stop().
[slot] void QBluetoothServiceDiscoveryAgent::clear()
Очищает результаты предыдущих поисков служб и сбрасывает uuidFilter(). Эта функция ничего не делает во время активного поиска служб (см. isActive()).
См. также discoveredServices().
QList<QBluetoothServiceInfo> QBluetoothServiceDiscoveryAgent::discoveredServices() const
Возвращает список всех обнаруженных служб.
Этот список служб накапливает новые обнаруженные службы из нескольких вызовов start(). Пока clear() не будет вызван, размер списка не уменьшается. Это означает, что если удалённый Bluetooth-устройство выходит из зоны действия между двумя последовательными вызовами start(), список может содержать устаревшие записи.
Примечание: Список служб всегда следует очищать перед изменением режима поиска.
См. также clear().
Error QBluetoothServiceDiscoveryAgent::error() const
Возвращает тип последней ошибки. Если поиск служб выполнен для одного remoteAddress(), он вернёт ошибки, возникшие во время попытки обнаружения служб на этом устройстве. Если remoteAddress() не установлен и устройства обнаруживаются с помощью сканирования, ошибки во время поиска служб на отдельных устройствах не сохраняются и не генерируются сигналы. В этом случае ошибки вполне нормальны, так как некоторые устройства могут не отвечать на запросы обнаружения или могут больше не находиться в зоне действия. Такие ошибки подавляются. Если не возвращаются службы, можно предположить, что службы не были обнаружены.
[signal] void QBluetoothServiceDiscoveryAgent::error(QBluetoothServiceDiscoveryAgent::Error error)
Этот сигнал генерируется, когда возникает ошибка error. Параметр error описывает произошедшую ошибку.
Примечание: Сигнал error перегружен в этом классе. Чтобы подключиться к нему с использованием синтаксиса указателя на функцию, необходимо указать тип сигнала в статическом преобразовании, как показано в этом примере:
connect(bluetoothServiceDiscoveryAgent, static_cast<void(QBluetoothServiceDiscoveryAgent::*)(QBluetoothServiceDiscoveryAgent::Error)>(&QBluetoothServiceDiscoveryAgent::error),
[=](QBluetoothServiceDiscoveryAgent::Error error){ /* ... */ }); QString QBluetoothServiceDiscoveryAgent::errorString() const
Возвращает удобочитаемое описание последней ошибки, возникшей во время поиска служб.
[signal] void QBluetoothServiceDiscoveryAgent::finished()
Этот сигнал генерируется, когда поиск Bluetooth-служб завершается.
В отличие от сигнала QBluetoothDeviceDiscoveryAgent::finished(), этот сигнал будет сгенерирован даже при возникновении ошибки во время поиска служб. Поэтому рекомендуется проверить сигнал error(), чтобы оценить успех поиска служб.
bool QBluetoothServiceDiscoveryAgent::isActive() const
Возвращает true если поиск служб в настоящее время активен; в противном случае возвращает false. Активный поиск можно остановить, вызвав stop().
QBluetoothAddress QBluetoothServiceDiscoveryAgent::remoteAddress() const
Возвращает адрес удалённого устройства. Если setRemoteAddress() не был вызван, функция вернёт объект QBluetoothAddress по умолчанию.
См. также setRemoteAddress().
[signal] void QBluetoothServiceDiscoveryAgent::serviceDiscovered(const QBluetoothServiceInfo &info)
Этот сигнал генерируется, когда обнаруживается Bluetooth-служба, описанная в info.
Примечание: Передаваемый параметр QBluetoothServiceInfo может содержать службу Bluetooth Low Energy, если целевое устройство рекламирует службу через SDP. Это требуется от устройств, которые поддерживают как классический Bluetooth (BaseRate), так и службы Low Energy.
См. также QBluetoothDeviceInfo::coreConfigurations().
bool QBluetoothServiceDiscoveryAgent::setRemoteAddress(const QBluetoothAddress &address)
Устанавливает адрес удалённого устройства на address. Если address создан по умолчанию, службы будут обнаружены на всех доступных Bluetooth-устройствах. Новый адрес удалённого устройства может быть установлен только при отсутствии активного поиска служб; в противном случае эта функция возвращает false.
На некоторых платформах поиск служб может привести к запросам сопряжения. Поэтому не рекомендуется выполнять поиск служб на всех устройствах. Эта функция может быть использована для ограничения поиска служб конкретным устройством.
См. также remoteAddress().
void QBluetoothServiceDiscoveryAgent::setUuidFilter(const QList<QBluetoothUuid> &uuids)
Устанавливает фильтр UUID на uuids. Будут возвращены только службы, соответствующие UUID в uuids. Сопоставление выполняется по атрибутам ServiceId и ServiceClassIds службы.
Пустой список UUID эквивалентен списку, содержащему только QBluetoothUuid::PublicBrowseGroup.
См. также uuidFilter().
void QBluetoothServiceDiscoveryAgent::setUuidFilter(const QBluetoothUuid &uuid)
Это перегруженный член-функция, предоставленный для удобства.
Устанавливает фильтр UUID на список, содержащий единственный элемент uuid. Сопоставление выполняется по атрибутам ServiceId и ServiceClassIds службы.
См. также uuidFilter().
[slot] void QBluetoothServiceDiscoveryAgent::start(DiscoveryMode mode = MinimalDiscovery)
Начинает поиск служб. mode определяет тип поиска, который необходимо выполнить.
На некоторых платформах поиск устройств может привести к запросам сопряжения.
См. также DiscoveryMode.
[slot] void QBluetoothServiceDiscoveryAgent::stop()
Останавливает процесс поиска служб. Сигнал canceled() будет сгенерирован после остановки поиска.
QList<QBluetoothUuid> QBluetoothServiceDiscoveryAgent::uuidFilter() const
Возвращает фильтр UUID.
См. также setUuidFilter().
© The Qt Company Ltd
Licensed under the GNU Free Documentation License, Version 1.3.
https://doc.qt.io/archives/qt-5.6/qbluetoothservicediscoveryagent.html