Auf dieser Seite

QBluetoothServiceDiscoveryAgent Class

Mit der Klasse „QBluetoothServiceDiscoveryAgent“ können Sie nach Bluetooth-Diensten suchen. Mehr...

Header: #include <QBluetoothServiceDiscoveryAgent>
CMake: find_package(Qt6 REQUIRED COMPONENTS Bluetooth)
target_link_libraries(mytarget PRIVATE Qt6::Bluetooth)
qmake: QT += bluetooth
Erbt von: 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)

Ausführliche Beschreibung

Der Erkennungsprozess basiert auf dem Bluetooth Service Discovery Process (SDP). Die folgenden Schritte sind erforderlich, um die von allen erreichbaren Bluetooth-Geräten angebotenen Dienste abzufragen:

  • Erstellen Sie eine Instanz von `QBluetoothServiceDiscoveryAgent`,
  • eine Verbindung zu den Signalen „ serviceDiscovered()“ oder „ finished()“ herstellen,
  • und rufen Sie ` start()` auf.
void MyClass::startServiceDiscovery()
{

    // Einen Discovery-Agent erstellen und eine Verbindung zu dessen Signalen herstellen
    QBluetoothServiceDiscoveryAgent*discoveryAgent = new QBluetoothServiceDiscoveryAgent(this);
    connect(discoveryAgent, SIGNAL(serviceDiscovered(QBluetoothServiceInfo)),
            this, SLOT(serviceDiscovered(QBluetoothServiceInfo)));

    // Eine Erkennung starten
    discoveryAgent->start();

    //...
}

// In deinem lokalen Slot Informationen über die gefundenen Geräte auslesen
void MyClass::serviceDiscovered(const QBluetoothServiceInfo&service)
{
    qDebug() << "Found new service:" << service.serviceName()
            << '(' << service.device().address().toString() << ')';
}

Standardmäßig wird eine minimale Dienstermittlung durchgeführt. In diesem Modus enthalten die zurückgegebenen ` QBluetoothServiceInfo `-Objekte garantiert nur UUID-Informationen zu Geräten und Diensten. Je nach Plattform und Gerätefunktionen können auch weitere Dienstinformationen verfügbar sein. Der Modus der minimalen Dienstermittlung stützt sich auf zwischengespeicherte SDP-Daten der Plattform. Daher ist es möglich, dass bei dieser Erkennung ein Gerät nicht gefunden wird, obwohl es physisch verfügbar ist. In solchen Fällen muss eine vollständige Erkennung durchgeführt werden, um eine Aktualisierung des Plattform-Caches zu erzwingen. Für die meisten Anwendungsfälle ist eine minimale Erkennung jedoch ausreichend, da sie wesentlich schneller ist und andere Klassen, die aktuelle Informationen benötigen – wie beispielsweise ` QBluetoothSocket::connectToService()` – bei Bedarf eine zusätzliche Erkennung durchführen. Wenn die vollständigen Dienstinformationen benötigt werden, übergeben Sie ` FullDiscovery ` als Parameter für `discoveryMode` an ` start()`.

Diese Klasse nutzt intern möglicherweise QBluetoothDeviceDiscoveryAgent, um unbekannte Geräte zu finden.

Die Diensterkennung kann möglicherweise auch Bluetooth Low Energy-Dienste finden, wenn es sich bei dem Zielgerät um eine Kombination aus einem klassischen und einem Low Energy-Gerät handelt. Diese Geräte müssen ihre Low-Energy-Dienste über SDP bekanntgeben. Wenn das Zielgerät ausschließlich Bluetooth-Low-Energy-Dienste unterstützt, gibt es diese wahrscheinlich nicht über SDP bekannt. Zur Durchführung der Diensterkennung bei Low-Energy-Geräten sollte die Klasse „ QLowEnergyController “ verwendet werden.

Unter iOS kann diese Klasse nicht verwendet werden, da die Plattform keine API bereitstellt, die den Zugriff auf Funktionen im Zusammenhang mit dem „QBluetoothServiceDiscoveryAgent“ ermöglicht.

Siehe auch „ QBluetoothDeviceDiscoveryAgent “ und „ QLowEnergyController “.

Dokumentation zu Mitgliedstypen

enum QBluetoothServiceDiscoveryAgent::DiscoveryMode

Diese Enumeration beschreibt den Modus der Dienstermittlung.

KonstanteWertBeschreibung
QBluetoothServiceDiscoveryAgent::MinimalDiscovery0Führt eine minimale Diensterkennung durch. Die zurückgegebenen „ QBluetoothServiceInfo “-Objekte sind möglicherweise unvollständig und enthalten garantiert nur UUID-Informationen zu Geräten und Diensten. Da sich die minimale Erkennung auf zwischengespeicherte SDP-Daten stützt, wird ein physisch vorhandenes Gerät möglicherweise erst gefunden, wenn eine vollständige Diensterkennung („ FullDiscovery “) durchgeführt wird.
QBluetoothServiceDiscoveryAgent::FullDiscovery1Führt eine vollständige Dienstermittlung durch.

enum QBluetoothServiceDiscoveryAgent::Error

Diese Enumeration beschreibt Fehler, die bei der Dienstermittlung auftreten können.

KonstanteWertBeschreibung
QBluetoothServiceDiscoveryAgent::NoErrorQBluetoothDeviceDiscoveryAgent::NoErrorEs ist kein Fehler aufgetreten.
QBluetoothServiceDiscoveryAgent::PoweredOffErrorQBluetoothDeviceDiscoveryAgent::PoweredOffErrorDer Bluetooth-Adapter ist ausgeschaltet. Schalten Sie ihn ein, bevor Sie die Erkennung durchführen.
QBluetoothServiceDiscoveryAgent::InputOutputErrorQBluetoothDeviceDiscoveryAgent::InputOutputErrorBeim Schreiben oder Lesen vom Gerät ist ein Fehler aufgetreten.
QBluetoothServiceDiscoveryAgent::InvalidBluetoothAdapterError (since Qt 5.3)QBluetoothDeviceDiscoveryAgent::InvalidBluetoothAdapterErrorDie übergebene lokale Adapteradresse stimmt mit der physischen Adapteradresse keines lokalen Bluetooth-Geräts überein.
QBluetoothServiceDiscoveryAgent::MissingPermissionsError (since Qt 6.4)QBluetoothDeviceDiscoveryAgent::MissingPermissionsErrorDas Betriebssystem fordert Berechtigungen an, die vom Benutzer nicht erteilt wurden.
QBluetoothServiceDiscoveryAgent::UnknownErrorQBluetoothDeviceDiscoveryAgent::UnknownErrorEs ist ein unbekannter Fehler aufgetreten.

Dokumentation der Member-Funktionen

[explicit] QBluetoothServiceDiscoveryAgent::QBluetoothServiceDiscoveryAgent(QObject *parent = nullptr)

Erstellt einen neuen `QBluetoothServiceDiscoveryAgent` mit dem Parameter ` parent`. Die Suche erfolgt über den lokalen Standard-Bluetooth-Adapter.

[explicit] QBluetoothServiceDiscoveryAgent::QBluetoothServiceDiscoveryAgent(const QBluetoothAddress &deviceAdapter, QObject *parent = nullptr)

Erstellt einen neuen `QBluetoothServiceDiscoveryAgent` für ` deviceAdapter ` und mit ` parent`.

Für die Dienstsuche wird ` deviceAdapter ` verwendet. Wird ` deviceAdapter ` standardmäßig initialisiert, verwendet das resultierende `QBluetoothServiceDiscoveryAgent`-Objekt den lokalen Standard-Bluetooth-Adapter.

Wird ein „ deviceAdapter “ angegeben, der kein lokaler Adapter ist, wird „ error()“ auf „ InvalidBluetoothAdapterError “ gesetzt. Daher wird empfohlen, das Fehlerflag unmittelbar nach der Verwendung dieses Konstruktors zu prüfen.

Hinweis: Unter WinRT wird die übergebene Adapteradresse ignoriert.

Hinweis: Unter Android ist die Übergabe einer beliebigen „ deviceAdapter “-Adresse bedeutungslos, da Android 6.0 oder höher die lokale Bluetooth-Adresse nicht mehr veröffentlicht. Folglich kann die übergebene Adapteradresse niemals mit der lokalen Adapteradresse abgeglichen werden. Daher löst der anschließende Aufruf von ` start()` immer ` InvalidBluetoothAdapterError` aus.

Siehe auch ` error()`.

[virtual noexcept] QBluetoothServiceDiscoveryAgent::~QBluetoothServiceDiscoveryAgent()

Destruktor für QBluetoothServiceDiscoveryAgent

[signal] void QBluetoothServiceDiscoveryAgent::canceled()

Dieses Signal wird ausgelöst, wenn die Service-Erkennung durch einen Aufruf von ` stop()` abgebrochen wurde.

[slot] void QBluetoothServiceDiscoveryAgent::clear()

Löscht die Ergebnisse früherer Diensterkennungen und setzt „ uuidFilter “ () zurück. Diese Funktion hat keine Auswirkung auf eine laufende Diensterkennung (siehe „ isActive “ ()).

Siehe auch discoveredServices().

QList<QBluetoothServiceInfo> QBluetoothServiceDiscoveryAgent::discoveredServices() const

Gibt die Liste aller erkannten Dienste zurück.

Diese Liste von Diensten sammelt neu erkannte Dienste aus mehreren Aufrufen von ` start()` an. Solange ` clear()` nicht aufgerufen wird, kann die Liste nicht kleiner werden. Das bedeutet, dass die Liste veraltete Einträge enthalten kann, wenn sich ein entferntes Bluetooth-Gerät zwischen zwei aufeinanderfolgenden Aufrufen von ` start()` außerhalb der Reichweite bewegt.

Hinweis: Die Liste der Dienste sollte immer gelöscht 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 Dienstermittlung für ein einzelnes Gerät mit ` remoteAddress()` durchgeführt wird, werden Fehler zurückgegeben, die beim Versuch der Dienstermittlung auf diesem Gerät aufgetreten sind. Ist ` remoteAddress()` nicht gesetzt und werden Geräte durch einen Scan ermittelt, werden Fehler während der Dienstermittlung auf einzelnen Geräten nicht gespeichert und es werden keine Signale ausgegeben. In diesem Fall sind Fehler durchaus normal, da einige Geräte möglicherweise nicht auf die Erkennung reagieren oder sich nicht mehr in Reichweite befinden. Solche Fehler werden unterdrückt. Werden keine Dienste zurückgegeben, kann davon ausgegangen werden, dass keine Dienste erkannt werden konnten.

Etwaige zuvor aufgetretene Fehler werden beim Neustart der Erkennung zurückgesetzt.

[signal, since 6.2] void QBluetoothServiceDiscoveryAgent::errorOccurred(QBluetoothServiceDiscoveryAgent::Error error)

Dieses Signal wird ausgelöst, 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 für Menschen lesbare Beschreibung des letzten Fehlers zurück, der während der Service-Erkennung 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 ausgelöst, wenn während der Dienstsuche ein Fehler aufgetreten ist. Daher wird empfohlen, das Signal „ errorOccurred()“ zu überprüfen, um den Erfolg der Dienstsuche zu bewerten.

bool QBluetoothServiceDiscoveryAgent::isActive() const

Gibt „ true “ zurück, wenn die Diensterkennung derzeit aktiv ist; andernfalls wird „ false “ zurückgegeben. Eine aktive Diensterkennung kann durch den Aufruf von „ stop()“ gestoppt werden.

QBluetoothAddress QBluetoothServiceDiscoveryAgent::remoteAddress() const

Gibt die Adresse des Remote-Geräts zurück. Wird setRemoteAddress() nicht aufgerufen, gibt die Funktion ein standardmäßig initialisiertes QBluetoothAddress zurück.

Siehe auch setRemoteAddress().

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

Dieses Signal wird ausgesendet, wenn der unter info beschriebene Bluetooth-Dienst erkannt 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-Dienste (BaseRate) als auch Low-Energy-Dienste unterstützen.

Siehe auch QBluetoothDeviceInfo::coreConfigurations().

bool QBluetoothServiceDiscoveryAgent::setRemoteAddress(const QBluetoothAddress &address)

Setzt die Adresse des Remote-Geräts auf address. Wenn address standardmäßig erstellt wird, werden Dienste auf allen erreichbaren Bluetooth-Geräten erkannt. Eine neue Remote-Adresse kann nur festgelegt werden, solange keine Dienstermittlung läuft; andernfalls gibt diese Funktion „false“ zurück.

Auf einigen Plattformen kann die Dienstermittlung zu Kopplungsanfragen führen. Daher wird davon abgeraten, eine Dienstermittlung auf allen Geräten durchzuführen. Mit dieser Funktion lässt sich die Dienstermittlung auf ein bestimmtes Gerät beschränken.

Siehe auch ` remoteAddress()`.

void QBluetoothServiceDiscoveryAgent::setUuidFilter(const QBluetoothUuid &uuid)

Dies ist eine überladene Member-Funktion, die aus Gründen der Benutzerfreundlichkeit bereitgestellt wird.

Setzt den UUID-Filter auf eine Liste, die das einzelne Element „ uuid “ enthält. Die Übereinstimmungsprüfung bezieht sich auf die Attribute „ ServiceId “ und „ ServiceClassIds “ des Dienstes.

Siehe auch ` uuidFilter()`.

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

Setzt den UUID-Filter auf uuids. Es werden nur Dienste zurückgegeben, deren UUIDs mit denen unter uuids übereinstimmen. Die Übereinstimmung bezieht sich auf die Attribute „ ServiceId “ und „ ServiceClassIds “ des Dienstes.

Eine leere UUID-Liste entspricht einer Liste, die ausschließlich QBluetoothUuid::ServiceClassUuid::PublicBrowseGroup enthält.

Siehe auch uuidFilter().

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

Startet die Dienstermittlung. Mit „ mode “ wird die Art der durchzuführenden Dienstermittlung festgelegt.

Auf einigen Plattformen kann die Geräteerkennung zu Kopplungsanfragen führen.

Siehe auch DiscoveryMode.

[slot] void QBluetoothServiceDiscoveryAgent::stop()

Beendet den Prozess der Dienstermittlung. Sobald die Suche beendet ist, wird das Signal „ canceled()“ ausgesendet.

QList<QBluetoothUuid> QBluetoothServiceDiscoveryAgent::uuidFilter() const

Gibt den UUID-Filter zurück.

Siehe auch setUuidFilter().

© 2026 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.