QBluetoothServiceDiscoveryAgent Class
La clase QBluetoothServiceDiscoveryAgent permite consultar servicios Bluetooth. Más...
| Cabecera: | #include <QBluetoothServiceDiscoveryAgent> |
| CMake: | find_package(Qt6 REQUIRED COMPONENTS Bluetooth)target_link_libraries(mytarget PRIVATE Qt6::Bluetooth) |
| qmake: | QT += bluetooth |
| Hereda: | QObject |
Tipos públicos
| enum | DiscoveryMode { MinimalDiscovery, FullDiscovery } |
| enum | Error { NoError, PoweredOffError, InputOutputError, InvalidBluetoothAdapterError, MissingPermissionsError, UnknownError } |
Funciones públicas
| 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 |
Ranuras públicas
| void | clear() |
| void | start(QBluetoothServiceDiscoveryAgent::DiscoveryMode mode = MinimalDiscovery) |
| void | stop() |
Señales
| void | canceled() |
(since 6.2) void | errorOccurred(QBluetoothServiceDiscoveryAgent::Error error) |
| void | finished() |
| void | serviceDiscovered(const QBluetoothServiceInfo &info) |
Descripción detallada
El proceso de descubrimiento se basa en el Proceso de Descubrimiento de Servicios Bluetooth (SDP). Los siguientes pasos son necesarios para consultar los servicios proporcionados por todos los dispositivos Bluetooth contactables:
- crear una instancia de QBluetoothServiceDiscoveryAgent,
- conectarse a las señales serviceDiscovered() o finished(),
- y llamar a start().
void MyClass::startServiceDiscovery() { // Crear un agente de descubrimiento y conectarse a sus señales QBluetoothServiceDiscoveryAgent *discoveryAgent = new QBluetoothServiceDiscoveryAgent(this); connect(discoveryAgent, SIGNAL(serviceDiscovered(QBluetoothServiceInfo)), this, SLOT(serviceDiscovered(QBluetoothServiceInfo))); // Iniciar un discoveryAgent->start(); //...}// En su slot local, leer información sobre los dispositivos encontradosvoid MyClass::serviceDiscovered(const QBluetoothServiceInfo &servicio){ qDebug() << "Found new service:" << service.serviceName() << '('<< service.device().address().toString()<< ')'; }
Por defecto se realiza un descubrimiento de servicio mínimo. En este modo, se garantiza que los objetos QBluetoothServiceInfo devueltos sólo contienen información UUID del dispositivo y del servicio. Dependiendo de las capacidades de la plataforma y el dispositivo, también puede estar disponible otra información de servicio. El modo de descubrimiento de servicio mínimo se basa en los datos SDP almacenados en caché de la plataforma. Por lo tanto, es posible que este descubrimiento no encuentre un dispositivo aunque esté físicamente disponible. En tales casos, debe realizarse una detección completa para forzar una actualización de la caché de la plataforma. Sin embargo, para la mayoría de los casos de uso, un descubrimiento mínimo es adecuado, ya que es mucho más rápido y otras clases que requieren información actualizada, como QBluetoothSocket::connectToService(), realizarán un descubrimiento adicional si es necesario. Si se requiere la información completa del servicio, pase FullDiscovery como parámetro discoveryMode a start().
Esta clase puede utilizar internamente QBluetoothDeviceDiscoveryAgent para encontrar dispositivos desconocidos.
El descubrimiento de servicios también puede encontrar servicios Bluetooth Low Energy si el dispositivo de destino es una combinación de un dispositivo clásico y Low Energy. Estos dispositivos deben anunciar sus servicios de baja energía a través de SDP. Si el dispositivo de destino sólo admite servicios Bluetooth Low Energy, es probable que no los anuncie a través de SDP. Se debe utilizar la clase QLowEnergyController para realizar el descubrimiento de servicios en dispositivos Low Energy.
En iOS, esta clase no se puede utilizar porque la plataforma no expone una API que pueda permitir el acceso a las funciones relacionadas con QBluetoothServiceDiscoveryAgent.
Véase también QBluetoothDeviceDiscoveryAgent y QLowEnergyController.
Documentación de tipos de miembros
enum QBluetoothServiceDiscoveryAgent::DiscoveryMode
Este enum describe el modo de descubrimiento del servicio.
| Constante | Valor | Descripción |
|---|---|---|
QBluetoothServiceDiscoveryAgent::MinimalDiscovery | 0 | Realiza un descubrimiento de servicio mínimo. Los objetos QBluetoothServiceInfo devueltos pueden estar incompletos y sólo se garantiza que contengan información sobre el UUID del dispositivo y el servicio. Dado que un descubrimiento mínimo se basa en datos SDP almacenados en caché, es posible que no encuentre un dispositivo físicamente existente hasta que se ejecute FullDiscovery. |
QBluetoothServiceDiscoveryAgent::FullDiscovery | 1 | Realiza un descubrimiento de servicio completo. |
enum QBluetoothServiceDiscoveryAgent::Error
Este enum describe los errores que pueden producirse durante la detección de servicios.
| Constante | Valor | Descripción |
|---|---|---|
QBluetoothServiceDiscoveryAgent::NoError | QBluetoothDeviceDiscoveryAgent::NoError | No se ha producido ningún error. |
QBluetoothServiceDiscoveryAgent::PoweredOffError | QBluetoothDeviceDiscoveryAgent::PoweredOffError | El adaptador Bluetooth está apagado, enciéndalo antes de realizar la detección. |
QBluetoothServiceDiscoveryAgent::InputOutputError | QBluetoothDeviceDiscoveryAgent::InputOutputError | Se ha producido un error al escribir o leer desde el dispositivo. |
QBluetoothServiceDiscoveryAgent::InvalidBluetoothAdapterError (since Qt 5.3) | QBluetoothDeviceDiscoveryAgent::InvalidBluetoothAdapterError | La dirección del adaptador local transmitida no coincide con la dirección física del adaptador de ningún dispositivo Bluetooth local. |
QBluetoothServiceDiscoveryAgent::MissingPermissionsError (since Qt 6.4) | QBluetoothDeviceDiscoveryAgent::MissingPermissionsError | El sistema operativo solicita permisos que el usuario no ha concedido. |
QBluetoothServiceDiscoveryAgent::UnknownError | QBluetoothDeviceDiscoveryAgent::UnknownError | Se ha producido un error desconocido. |
Documentación de las funciones miembro
[explicit] QBluetoothServiceDiscoveryAgent::QBluetoothServiceDiscoveryAgent(QObject *parent = nullptr)
Construye un nuevo QBluetoothServiceDiscoveryAgent con parent. La búsqueda se realiza a través del adaptador Bluetooth local por defecto.
[explicit] QBluetoothServiceDiscoveryAgent::QBluetoothServiceDiscoveryAgent(const QBluetoothAddress &deviceAdapter, QObject *parent = nullptr)
Construye un nuevo QBluetoothServiceDiscoveryAgent para deviceAdapter y con parent.
Utiliza deviceAdapter para la búsqueda de servicios. Si deviceAdapter se construye por defecto el objeto QBluetoothServiceDiscoveryAgent resultante utilizará el adaptador Bluetooth local por defecto.
Si se especifica un deviceAdapter que no es un adaptador local error() se establecerá en InvalidBluetoothAdapterError. Por lo tanto se recomienda comprobar el indicador de error inmediatamente después de utilizar este constructor.
Nota: En WinRT la dirección del adaptador pasada será ignorada.
Nota: En Android pasar cualquier dirección deviceAdapter no tiene sentido ya que Android 6.0 o posterior ya no publica la dirección Bluetooth local. Por lo tanto, la dirección del adaptador pasada nunca podrá ser comparada con la dirección del adaptador local. Por lo tanto, la llamada posterior a start() siempre activará InvalidBluetoothAdapterError.
Véase también error().
[virtual noexcept] QBluetoothServiceDiscoveryAgent::~QBluetoothServiceDiscoveryAgent()
Destructor para QBluetoothServiceDiscoveryAgent
[signal] void QBluetoothServiceDiscoveryAgent::canceled()
Esta señal se activa cuando se cancela el descubrimiento del servicio mediante una llamada a stop().
[slot] void QBluetoothServiceDiscoveryAgent::clear()
Borra los resultados de los descubrimientos de servicios anteriores y reinicia uuidFilter(). Esta función no hace nada durante un descubrimiento de servicio en curso (véase isActive()).
Véase también discoveredServices().
QList<QBluetoothServiceInfo> QBluetoothServiceDiscoveryAgent::discoveredServices() const
Devuelve la lista de todos los servicios descubiertos.
Esta lista de servicios acumula los servicios recién descubiertos a partir de múltiples llamadas a start(). A menos que se llame a clear(), la lista no puede disminuir de tamaño. Esto implica que si un dispositivo Bluetooth remoto sale del alcance entre dos llamadas posteriores a start(), la lista puede contener entradas obsoletas.
Nota: La lista de servicios debe borrarse siempre antes de cambiar el modo de detección.
Véase también clear().
QBluetoothServiceDiscoveryAgent::Error QBluetoothServiceDiscoveryAgent::error() const
Devuelve el tipo de error que se produjo por última vez. Si el descubrimiento de servicios se realiza para un único remoteAddress() devolverá los errores que se produjeron al intentar descubrir servicios en ese dispositivo. Si no se establece remoteAddress() y los dispositivos se descubren mediante un escaneo, los errores durante el descubrimiento de servicios en dispositivos individuales no se guardan y no se emiten señales. En este caso, los errores son bastante normales, ya que algunos dispositivos pueden no responder al descubrimiento o dejar de estar dentro del alcance. Estos errores se suprimen. Si no se devuelve ningún servicio, se puede asumir que no se ha podido descubrir ningún servicio.
Los posibles errores anteriores se borran al reiniciar la detección.
[signal, since 6.2] void QBluetoothServiceDiscoveryAgent::errorOccurred(QBluetoothServiceDiscoveryAgent::Error error)
Esta señal se emite cuando se produce un error. El parámetro error describe el error que se ha producido.
Esta función se introdujo en Qt 6.2.
QString QBluetoothServiceDiscoveryAgent::errorString() const
Devuelve una descripción legible por humanos del último error que se ha producido durante el descubrimiento del servicio.
Véase también error() y errorOccurred().
[signal] void QBluetoothServiceDiscoveryAgent::finished()
Esta señal se emite cuando finaliza el descubrimiento del servicio Bluetooth.
A diferencia de la señal QBluetoothDeviceDiscoveryAgent::finished(), esta señal se emitirá incluso cuando se produzca un error durante el descubrimiento del servicio. Por lo tanto, se recomienda comprobar la señal errorOccurred() para evaluar el éxito del descubrimiento del servicio.
bool QBluetoothServiceDiscoveryAgent::isActive() const
Devuelve true si el descubrimiento de servicios está activo; en caso contrario, devuelve false. Un descubrimiento activo puede detenerse llamando a stop().
QBluetoothAddress QBluetoothServiceDiscoveryAgent::remoteAddress() const
Devuelve la dirección del dispositivo remoto. Si no se llama a setRemoteAddress(), la función devolverá una QBluetoothAddress construida por defecto.
Véase también setRemoteAddress().
[signal] void QBluetoothServiceDiscoveryAgent::serviceDiscovered(const QBluetoothServiceInfo &info)
Esta señal se emite cuando se descubre el servicio Bluetooth descrito por info.
Nota: El parámetro QBluetoothServiceInfo pasado puede contener un servicio Bluetooth Low Energy si el dispositivo de destino anuncia el servicio a través de SDP. Esto es necesario en los dispositivos que admiten tanto el servicio Bluetooth clásico (BaseRate) como el servicio Low Energy.
Véase también QBluetoothDeviceInfo::coreConfigurations().
bool QBluetoothServiceDiscoveryAgent::setRemoteAddress(const QBluetoothAddress &address)
Establece la dirección del dispositivo remoto en address. Si address se construye por defecto, los servicios se descubrirán en todos los dispositivos Bluetooth contactables. Sólo se puede establecer una nueva dirección remota mientras no haya ningún descubrimiento de servicio en curso; de lo contrario, esta función devuelve false.
En algunas plataformas el descubrimiento de servicios puede llevar a peticiones de emparejamiento. Por lo tanto, no se recomienda realizar descubrimientos de servicio en todos los dispositivos. Esta función puede utilizarse para restringir el descubrimiento de servicios a un dispositivo concreto.
Véase también remoteAddress().
void QBluetoothServiceDiscoveryAgent::setUuidFilter(const QBluetoothUuid &uuid)
Esta es una función miembro sobrecargada, proporcionada por conveniencia.
Establece el filtro UUID en una lista que contiene el único elemento uuid. La coincidencia se aplica a los atributos ServiceId y ServiceClassIds del servicio.
Véase también uuidFilter().
void QBluetoothServiceDiscoveryAgent::setUuidFilter(const QList<QBluetoothUuid> &uuids)
Establece el filtro UUID en uuids. Sólo se devolverán los servicios que coincidan con los UUID de uuids. La coincidencia se aplica a los atributos ServiceId y ServiceClassIds del servicio.
Una lista de UUID vacía equivale a una lista que sólo contenga QBluetoothUuid::ServiceClassUuid::PublicBrowseGroup.
Véase también uuidFilter().
[slot] void QBluetoothServiceDiscoveryAgent::start(QBluetoothServiceDiscoveryAgent::DiscoveryMode mode = MinimalDiscovery)
Inicia la detección de servicios. mode especifica el tipo de detección de servicios que se va a realizar.
En algunas plataformas, el descubrimiento de dispositivos puede dar lugar a solicitudes de emparejamiento.
Véase también DiscoveryMode.
[slot] void QBluetoothServiceDiscoveryAgent::stop()
Detiene el proceso de búsqueda de servicios. La señal canceled() se emitirá una vez que la búsqueda se haya detenido.
QList<QBluetoothUuid> QBluetoothServiceDiscoveryAgent::uuidFilter() const
Devuelve el filtro UUID.
Véase también 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.