QBluetoothServiceDiscoveryAgent Class
Die Klasse QBluetoothServiceDiscoveryAgent ermöglicht die Abfrage von Bluetooth-Diensten. Mehr...
Header: | #include <QBluetoothServiceDiscoveryAgent> |
qmake: | QT += bluetooth |
Inherits: | QObject |
Öffentliche Typen
enum | DiscoveryMode { MinimalDiscovery, FullDiscovery } |
enum | Error { NoError, PoweredOffError, InputOutputError, InvalidBluetoothAdapterError, MissingPermissionsError, UnknownError } |
Öffentliche Funktionen
QBluetoothServiceDiscoveryAgent(QObject *parent = nullptr) | |
QBluetoothServiceDiscoveryAgent(const QBluetoothAddress &deviceAdapter, QObject *parent = nullptr) | |
virtual | ~QBluetoothServiceDiscoveryAgent() |
QList<QBluetoothServiceInfo> | discoveredServices() const |
QBluetoothServiceDiscoveryAgent::Error | error() const |
QString | errorString() const |
bool | isActive() const |
QBluetoothAddress | remoteAddress() const |
bool | setRemoteAddress(const QBluetoothAddress &address) |
void | setUuidFilter(const QBluetoothUuid &uuid) |
void | setUuidFilter(const QList<QBluetoothUuid> &uuids) |
QList<QBluetoothUuid> | uuidFilter() const |
Öffentliche Slots
void | clear() |
void | start(QBluetoothServiceDiscoveryAgent::DiscoveryMode mode = MinimalDiscovery) |
void | stop() |
Signale
void | canceled() |
(since 6.2) void | errorOccurred(QBluetoothServiceDiscoveryAgent::Error error) |
void | finished() |
void | serviceDiscovered(const QBluetoothServiceInfo &info) |
Detaillierte Beschreibung
Der Erkennungsprozess stützt sich auf den Bluetooth Service Discovery Process (SDP). Die folgenden Schritte sind erforderlich, um die von allen kontaktierbaren Bluetooth-Geräten angebotenen Dienste abzufragen:
- Erstellen einer Instanz von QBluetoothServiceDiscoveryAgent,
- Verbinden Sie sich entweder mit den Signalen serviceDiscovered() oder finished(),
- und Aufruf von start().
void MyClass::startServiceDiscovery() { // Erstellen Sie einen DiscoveryAgent und stellen Sie eine Verbindung zu seinen Signalen her QBluetoothServiceDiscoveryAgent *discoveryAgent = new QBluetoothServiceDiscoveryAgent(this); connect(discoveryAgent, SIGNAL(serviceDiscovered(QBluetoothServiceInfo)), this, SLOT(serviceDiscovered(QBluetoothServiceInfo))); // Starten Sie eine Entdeckung discoveryAgent->start(); //...}// Lesen Sie in Ihrem lokalen Slot Informationen über die gefundenen Gerätevoid MyClass::serviceDiscovered(const QBluetoothServiceInfo &service){ qDebug() << "Found new service:" << service.serviceName() << '('<< service.device().address().toString()<< ')'; }
Standardmäßig wird eine minimale Dienstsuche durchgeführt. In diesem Modus enthalten die zurückgegebenen QBluetoothServiceInfo Objekte garantiert nur Geräte- und Dienst-UUID-Informationen. Je nach Plattform und Gerätefähigkeiten können auch andere Dienstinformationen verfügbar sein. Der Modus der minimalen Diensterfassung stützt sich auf zwischengespeicherte SDP-Daten der Plattform. Daher ist es möglich, dass diese Erkennung ein Gerät nicht findet, obwohl es physisch verfügbar ist. In solchen Fällen muss eine vollständige Suche durchgeführt werden, um eine Aktualisierung des Plattform-Caches zu erzwingen. Für die meisten Anwendungsfälle ist jedoch eine minimale Suche ausreichend, da sie viel schneller ist, und andere Klassen, die aktuelle Informationen benötigen, wie QBluetoothSocket::connectToService(), führen bei Bedarf eine zusätzliche Suche durch. Wenn die vollständigen Dienstinformationen erforderlich sind, übergeben Sie FullDiscovery als discoveryMode-Parameter an start().
Diese Klasse kann intern QBluetoothDeviceDiscoveryAgent verwenden, um unbekannte Geräte zu finden.
Die Dienstsuche kann auch Bluetooth Low Energy Dienste finden, wenn das Zielgerät eine Kombination aus einem klassischen und einem Low Energy Gerät ist. Diese Geräte müssen ihre Low Energy-Dienste über SDP bekannt geben. Wenn das Zielgerät nur Bluetooth-Low-Energy-Dienste unterstützt, ist es wahrscheinlich, dass es diese nicht über SDP ankündigt. Die Klasse QLowEnergyController sollte verwendet werden, um die Diensteerkennung auf Low Energy-Geräten durchzuführen.
Unter iOS kann diese Klasse nicht verwendet werden, da die Plattform keine API bereitstellt, die den Zugriff auf QBluetoothServiceDiscoveryAgent-bezogene Funktionen ermöglicht.
Siehe auch QBluetoothDeviceDiscoveryAgent und QLowEnergyController.
Dokumentation der Mitgliedstypen
enum QBluetoothServiceDiscoveryAgent::DiscoveryMode
Diese Aufzählung beschreibt den Modus der Dienstsuche.
Konstante | Wert | Beschreibung |
---|---|---|
QBluetoothServiceDiscoveryAgent::MinimalDiscovery | 0 | Führt eine minimale Dienstsuche durch. Die zurückgegebenen QBluetoothServiceInfo Objekte können unvollständig sein und enthalten garantiert nur Geräte- und Dienst-UUID-Informationen. Da eine minimale Ermittlung auf zwischengespeicherten SDP-Daten beruht, findet sie möglicherweise kein physisch vorhandenes Gerät, bis eine FullDiscovery durchgeführt wird. |
QBluetoothServiceDiscoveryAgent::FullDiscovery | 1 | Führt eine vollständige Dienstsuche durch. |
enum QBluetoothServiceDiscoveryAgent::Error
Diese Aufzählung beschreibt Fehler, die bei der Dienstsuche auftreten können.
Konstante | Wert | Beschreibung |
---|---|---|
QBluetoothServiceDiscoveryAgent::NoError | QBluetoothDeviceDiscoveryAgent::NoError | Es ist kein Fehler aufgetreten. |
QBluetoothServiceDiscoveryAgent::PoweredOffError | QBluetoothDeviceDiscoveryAgent::PoweredOffError | Der Bluetooth-Adapter ist ausgeschaltet, schalten Sie ihn ein, bevor Sie die Erkennung durchführen. |
QBluetoothServiceDiscoveryAgent::InputOutputError | QBluetoothDeviceDiscoveryAgent::InputOutputError | Beim Schreiben oder Lesen des Geräts ist ein Fehler aufgetreten. |
QBluetoothServiceDiscoveryAgent::InvalidBluetoothAdapterError (since Qt 5.3) | QBluetoothDeviceDiscoveryAgent::InvalidBluetoothAdapterError | Die übergebene lokale Adapteradresse stimmt nicht mit der physischen Adapteradresse eines lokalen Bluetooth-Geräts überein. |
QBluetoothServiceDiscoveryAgent::MissingPermissionsError (since Qt 6.4) | QBluetoothDeviceDiscoveryAgent::MissingPermissionsError | Das Betriebssystem fordert Berechtigungen an, die vom Benutzer nicht gewährt wurden. |
QBluetoothServiceDiscoveryAgent::UnknownError | QBluetoothDeviceDiscoveryAgent::UnknownError | Ein unbekannter Fehler ist aufgetreten. |
Dokumentation der Mitgliedsfunktionen
[explicit]
QBluetoothServiceDiscoveryAgent::QBluetoothServiceDiscoveryAgent(QObject *parent = nullptr)
Konstruiert einen neuen QBluetoothServiceDiscoveryAgent mit parent. Die Suche wird über den lokalen Standard-Bluetooth-Adapter durchgeführt.
[explicit]
QBluetoothServiceDiscoveryAgent::QBluetoothServiceDiscoveryAgent(const QBluetoothAddress &deviceAdapter, QObject *parent = nullptr)
Konstruiert einen neuen QBluetoothServiceDiscoveryAgent für deviceAdapter und mit parent.
Er verwendet deviceAdapter für die Dienstsuche. Wenn deviceAdapter standardmäßig konstruiert ist, verwendet das resultierende QBluetoothServiceDiscoveryAgent-Objekt den lokalen Standard-Bluetooth-Adapter.
Wenn ein deviceAdapter angegeben wird, der kein lokaler Adapter ist, wird error() auf InvalidBluetoothAdapterError gesetzt. Daher wird empfohlen, das Fehlerflag unmittelbar nach der Verwendung dieses Konstruktors zu testen.
Hinweis: Unter WinRT wird die übergebene Adapteradresse ignoriert.
Hinweis: Unter Android ist die Übergabe einer deviceAdapter Adresse bedeutungslos, da Android 6.0 oder später die lokale Bluetooth Adresse nicht mehr veröffentlicht. In der Folge kann die übergebene Adapteradresse nie mit der lokalen Adapteradresse abgeglichen werden. Daher wird der nachfolgende Aufruf von start() immer InvalidBluetoothAdapterError auslösen.
Siehe auch error().
[virtual noexcept]
QBluetoothServiceDiscoveryAgent::~QBluetoothServiceDiscoveryAgent()
Destruktor für QBluetoothServiceDiscoveryAgent
[signal]
void QBluetoothServiceDiscoveryAgent::canceled()
Dieses Signal wird ausgelöst, wenn die Dienstsuche durch einen Aufruf von stop() abgebrochen wurde.
[slot]
void QBluetoothServiceDiscoveryAgent::clear()
Löscht die Ergebnisse früherer Dienstermittlungen und setzt uuidFilter() zurück. Diese Funktion tut nichts während einer laufenden Dienstsuche (siehe isActive()).
Siehe auch discoveredServices().
QList<QBluetoothServiceInfo> QBluetoothServiceDiscoveryAgent::discoveredServices() const
Gibt die Liste aller entdeckten Dienste zurück.
Diese Liste der Dienste sammelt neu entdeckte Dienste aus mehreren Aufrufen von start(). Solange clear() nicht aufgerufen wird, kann die Liste nicht verkleinert werden. Das bedeutet, dass die Liste veraltete Einträge enthalten kann, wenn ein entferntes Bluetooth-Gerät zwischen zwei aufeinanderfolgenden Aufrufen von start() die Reichweite verlässt.
Hinweis: Die Liste der Dienste sollte immer geleert werden, bevor der Erkennungsmodus geändert wird.
Siehe auch clear().
QBluetoothServiceDiscoveryAgent::Error QBluetoothServiceDiscoveryAgent::error() const
Gibt den Typ des zuletzt aufgetretenen Fehlers zurück. Wenn die Dienstsuche für ein einzelnes remoteAddress() durchgeführt wird, werden Fehler zurückgegeben, die beim Versuch, Dienste auf diesem Gerät zu finden, aufgetreten sind. Wenn remoteAddress() nicht gesetzt ist und Geräte durch einen Scan entdeckt werden, werden Fehler bei der Dienstsuche auf einzelnen Geräten nicht gespeichert und es werden keine Signale ausgegeben. In diesem Fall sind Fehler ziemlich normal, da einige Geräte möglicherweise nicht auf die Suche reagieren oder nicht mehr in Reichweite sind. Solche Fehler werden unterdrückt. Wenn keine Dienste zurückgegeben werden, kann davon ausgegangen werden, dass keine Dienste ermittelt werden konnten.
Eventuell vorher aufgetretene Fehler werden bei einem Neustart der Erkennung gelöscht.
[signal, since 6.2]
void QBluetoothServiceDiscoveryAgent::errorOccurred(QBluetoothServiceDiscoveryAgent::Error error)
Dieses Signal wird ausgegeben, wenn ein error auftritt. Der Parameter error beschreibt den aufgetretenen Fehler.
Diese Funktion wurde in Qt 6.2 eingeführt.
QString QBluetoothServiceDiscoveryAgent::errorString() const
Gibt eine von Menschen lesbare Beschreibung des letzten Fehlers zurück, der während der Dienstsuche aufgetreten ist.
Siehe auch error() und errorOccurred().
[signal]
void QBluetoothServiceDiscoveryAgent::finished()
Dieses Signal wird ausgegeben, wenn die Bluetooth-Dienstsuche abgeschlossen ist.
Im Gegensatz zum Signal QBluetoothDeviceDiscoveryAgent::finished() wird dieses Signal auch dann ausgegeben, wenn während der Dienstsuche ein Fehler aufgetreten ist. Es wird daher empfohlen, das Signal errorOccurred() zu überprüfen, um den Erfolg der Dienstsuche zu bewerten.
bool QBluetoothServiceDiscoveryAgent::isActive() const
Gibt true
zurück, wenn die Dienstermittlung gerade aktiv ist; andernfalls wird false
zurückgegeben. Eine aktive Ermittlung kann durch den Aufruf von stop() beendet werden.
QBluetoothAddress QBluetoothServiceDiscoveryAgent::remoteAddress() const
Gibt die Adresse des entfernten Geräts zurück. Wenn setRemoteAddress() nicht aufgerufen wird, gibt die Funktion eine Standardkonstruktion QBluetoothAddress zurück.
Siehe auch setRemoteAddress().
[signal]
void QBluetoothServiceDiscoveryAgent::serviceDiscovered(const QBluetoothServiceInfo &info)
Dieses Signal wird ausgesendet, wenn der durch info beschriebene Bluetooth-Dienst entdeckt wird.
Hinweis: Der übergebene Parameter QBluetoothServiceInfo kann einen Bluetooth-Low-Energy-Dienst enthalten, wenn das Zielgerät den Dienst über SDP ankündigt. Dies ist bei Geräten erforderlich, die sowohl klassische Bluetooth- (BaseRate) als auch Low Energy-Dienste unterstützen.
Siehe auch QBluetoothDeviceInfo::coreConfigurations().
bool QBluetoothServiceDiscoveryAgent::setRemoteAddress(const QBluetoothAddress &address)
Setzt die Adresse des entfernten Geräts auf address. Wenn address standardmäßig eingerichtet ist, werden die Dienste auf allen kontaktierbaren Bluetooth-Geräten ermittelt. Eine neue entfernte Adresse kann nur eingestellt werden, wenn keine Dienstsuche läuft; andernfalls gibt diese Funktion false zurück.
Auf einigen Plattformen kann die Dienstsuche zu Pairing-Anfragen führen. Daher ist es nicht empfehlenswert, die Dienstsuche auf allen Geräten durchzuführen. Diese Funktion kann verwendet werden, um die Dienstsuche auf ein bestimmtes Gerät zu beschränken.
Siehe auch remoteAddress().
void QBluetoothServiceDiscoveryAgent::setUuidFilter(const QBluetoothUuid &uuid)
Dies ist eine überladene Funktion, die der Einfachheit halber bereitgestellt wird.
Setzt den UUID-Filter auf eine Liste, die das einzelne Element uuid enthält. Der Abgleich gilt für die Attribute ServiceId und ServiceClassIds des Dienstes.
Siehe auch uuidFilter().
void QBluetoothServiceDiscoveryAgent::setUuidFilter(const QList<QBluetoothUuid> &uuids)
Setzt den UUID-Filter auf uuids. Nur Dienste, die mit den UUIDs in uuids übereinstimmen, werden zurückgegeben. Der Abgleich gilt für die Attribute ServiceId und ServiceClassIds des Dienstes.
Eine leere UUID-Liste ist gleichbedeutend mit einer Liste, die nur QBluetoothUuid::ServiceClassUuid::PublicBrowseGroup enthält.
Siehe auch uuidFilter().
[slot]
void QBluetoothServiceDiscoveryAgent::start(QBluetoothServiceDiscoveryAgent::DiscoveryMode mode = MinimalDiscovery)
Startet die Diensteerkennung. mode gibt die Art der durchzuführenden Diensteerkennung an.
Auf einigen Plattformen kann die Geräteerkennung zu Pairing-Anfragen führen.
Siehe auch DiscoveryMode.
[slot]
void QBluetoothServiceDiscoveryAgent::stop()
Hält den Prozess der Dienstsuche an. Das Signal canceled() wird ausgegeben, sobald die Suche beendet ist.
QList<QBluetoothUuid> QBluetoothServiceDiscoveryAgent::uuidFilter() const
Gibt den UUID-Filter zurück.
Siehe auch setUuidFilter().
© 2025 The Qt Company Ltd. Documentation contributions included herein are the copyrights of their respective owners. The documentation provided herein is licensed under the terms of the GNU Free Documentation License version 1.3 as published by the Free Software Foundation. Qt and respective logos are trademarks of The Qt Company Ltd. in Finland and/or other countries worldwide. All other trademarks are property of their respective owners.