QBluetoothDeviceDiscoveryAgent Class
La clase QBluetoothDeviceDiscoveryAgent descubre los dispositivos Bluetooth cercanos. Más...
| Cabecera: | #include <QBluetoothDeviceDiscoveryAgent> |
| CMake: | find_package(Qt6 REQUIRED COMPONENTS Bluetooth)target_link_libraries(mytarget PRIVATE Qt6::Bluetooth) |
| qmake: | QT += bluetooth |
| Hereda: | QObject |
Tipos públicos
| enum | DiscoveryMethod { NoMethod, ClassicMethod, LowEnergyMethod } |
| flags | DiscoveryMethods |
| enum | Error { NoError, PoweredOffError, InputOutputError, InvalidBluetoothAdapterError, UnsupportedPlatformError, …, UnknownError } |
Funciones públicas
| QBluetoothDeviceDiscoveryAgent(QObject *parent = nullptr) | |
| QBluetoothDeviceDiscoveryAgent(const QBluetoothAddress &deviceAdapter, QObject *parent = nullptr) | |
| virtual | ~QBluetoothDeviceDiscoveryAgent() |
| QList<QBluetoothDeviceInfo> | discoveredDevices() const |
| QBluetoothDeviceDiscoveryAgent::Error | error() const |
| QString | errorString() const |
| bool | isActive() const |
| int | lowEnergyDiscoveryTimeout() const |
| void | setLowEnergyDiscoveryTimeout(int timeout) |
Ranuras públicas
Señales
| void | canceled() |
| void | deviceDiscovered(const QBluetoothDeviceInfo &info) |
| void | deviceUpdated(const QBluetoothDeviceInfo &info, QBluetoothDeviceInfo::Fields updatedFields) |
(since 6.2) void | errorOccurred(QBluetoothDeviceDiscoveryAgent::Error error) |
| void | finished() |
Miembros públicos estáticos
| QBluetoothDeviceDiscoveryAgent::DiscoveryMethods | supportedDiscoveryMethods() |
Descripción detallada
Para descubrir los dispositivos Bluetooth cercanos:
- crear una instancia de QBluetoothDeviceDiscoveryAgent,
- conéctate a las señales deviceDiscovered() o finished(),
- y llama a start().
void MyClass::startDeviceDiscovery() { // Crear un agente de descubrimiento y conectarse a sus señales QBluetoothDeviceDiscoveryAgent *discoveryAgent = new QBluetoothDeviceDiscoveryAgent(this); connect(discoveryAgent, SIGNAL(deviceDiscovered(QBluetoothDeviceInfo)), this, SLOT(deviceDiscovered(QBluetoothDeviceInfo))); // Iniciar un discoveryAgent->start(); //...}// En su slot local, leer información sobre los dispositivos encontradosvoid MyClass::deviceDiscovered(const QBluetoothDeviceInfo &dispositivo){ qDebug() << "Found new device:" << device.name() << '(' << device.address().toString() << ')'; }
Para recuperar resultados de forma asíncrona, conéctese a la señal deviceDiscovered(). Para obtener una lista de todos los dispositivos descubiertos, llame a discoveredDevices() después de la señal finished().
Esta clase puede utilizarse para descubrir dispositivos Bluetooth clásicos y de baja energía. El tipo de dispositivo individual puede determinarse mediante el atributo QBluetoothDeviceInfo::coreConfigurations(). En la mayoría de los casos, la lista devuelta por discoveredDevices() contiene ambos tipos de dispositivos. Sin embargo, no todas las plataformas pueden detectar ambos tipos de dispositivos. En plataformas con esta limitación (por ejemplo, iOS sólo admite la detección de dispositivos de baja energía), el proceso de detección limitará la búsqueda al tipo admitido.
Nota: Desde Android 6.0 la capacidad de detectar dispositivos requiere ACCESS_COARSE_LOCATION.
Nota: El backend Win32 actualmente no soporta el Indicador de Intensidad de Señal Recibida (RSSI), así como los Datos Específicos del Fabricante, u otras actualizaciones de datos anunciados por los dispositivos Bluetooth LE después del descubrimiento.
Documentación del tipo de miembro
enum QBluetoothDeviceDiscoveryAgent::DiscoveryMethod
flags QBluetoothDeviceDiscoveryAgent::DiscoveryMethods
Este enum describe el tipo de método de descubrimiento empleado por QBluetoothDeviceDiscoveryAgent.
| Constante | Valor | Descripción |
|---|---|---|
QBluetoothDeviceDiscoveryAgent::NoMethod | 0x0 | El descubrimiento no es posible. No se admite ninguno de los métodos disponibles. |
QBluetoothDeviceDiscoveryAgent::ClassicMethod | 0x01 | El proceso de detección busca dispositivos Bluetooth Classic (BaseRate). |
QBluetoothDeviceDiscoveryAgent::LowEnergyMethod | 0x02 | El proceso de detección busca dispositivos Bluetooth Low Energy. |
El tipo DiscoveryMethods es un typedef para QFlags<DiscoveryMethod>. Almacena una combinación OR de valores DiscoveryMethod.
Véase también supportedDiscoveryMethods().
enum QBluetoothDeviceDiscoveryAgent::Error
Indica todas las posibles condiciones de error encontradas durante el descubrimiento del dispositivo Bluetooth.
| Constante | Valor | Descripción |
|---|---|---|
QBluetoothDeviceDiscoveryAgent::NoError | 0 | No se ha producido ningún error. |
QBluetoothDeviceDiscoveryAgent::PoweredOffError | 2 | El adaptador Bluetooth está apagado, enciéndalo antes de realizar la detección. |
QBluetoothDeviceDiscoveryAgent::InputOutputError | 1 | Se ha producido un error al escribir o leer desde el dispositivo. |
QBluetoothDeviceDiscoveryAgent::InvalidBluetoothAdapterError | 3 | La dirección del adaptador local introducida no coincide con la dirección física del adaptador de ningún dispositivo Bluetooth local. |
QBluetoothDeviceDiscoveryAgent::UnsupportedPlatformError (since Qt 5.5) | 4 | La detección de dispositivos no es posible o no está implementada en la plataforma actual. El error se produce en respuesta a una llamada a start(). Un ejemplo de estos casos son las versiones de iOS inferiores a la 5.0, que no admiten en absoluto la búsqueda de dispositivos Bluetooth. |
QBluetoothDeviceDiscoveryAgent::UnsupportedDiscoveryMethod (since Qt 5.8) | 5 | Uno de los métodos de búsqueda solicitados no es compatible con la plataforma actual. |
QBluetoothDeviceDiscoveryAgent::LocationServiceTurnedOffError (since Qt 6.2) | 6 | El servicio de localización está desactivado. El uso de las API de Bluetooth no es posible cuando el servicio de localización está desactivado. |
QBluetoothDeviceDiscoveryAgent::MissingPermissionsError (since Qt 6.4) | 7 | El sistema operativo solicita permisos que el usuario no ha concedido. |
QBluetoothDeviceDiscoveryAgent::UnknownError | 100 | Se ha producido un error desconocido. |
Documentación de las funciones miembro
[explicit] QBluetoothDeviceDiscoveryAgent::QBluetoothDeviceDiscoveryAgent(QObject *parent = nullptr)
Construye un nuevo agente de descubrimiento de dispositivos Bluetooth con el padre parent.
[explicit] QBluetoothDeviceDiscoveryAgent::QBluetoothDeviceDiscoveryAgent(const QBluetoothAddress &deviceAdapter, QObject *parent = nullptr)
Construye un nuevo agente de descubrimiento de dispositivos Bluetooth con parent.
Utiliza deviceAdapter para la búsqueda de dispositivos. Si deviceAdapter se construye por defecto el objeto QBluetoothDeviceDiscoveryAgent 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.
Véase también error().
[virtual noexcept] QBluetoothDeviceDiscoveryAgent::~QBluetoothDeviceDiscoveryAgent()
Destructor para ~QBluetoothDeviceDiscoveryAgent()
[signal] void QBluetoothDeviceDiscoveryAgent::canceled()
Esta señal se emite cuando se aborta el descubrimiento de dispositivos mediante una llamada a stop().
[signal] void QBluetoothDeviceDiscoveryAgent::deviceDiscovered(const QBluetoothDeviceInfo &info)
Esta señal se emite cuando se descubre el dispositivo Bluetooth descrito por info.
La señal se emite en cuanto se ha recopilado la información más importante del dispositivo. Sin embargo, mientras no se emita la señal finished(), la recopilación de información continúa incluso para los dispositivos ya descubiertos. Esto es especialmente cierto para la información sobre la intensidad de la señal (RSSI) y las actualizaciones de datos del fabricante. Si el caso de uso requiere actualizaciones continuas de datos del fabricante o RSSI, es aconsejable recuperar la información del dispositivo a través de discoveredDevices() una vez finalizado el descubrimiento o escuchar la señal deviceUpdated().
Si lowEnergyDiscoveryTimeout() es mayor que 0, la señal sólo se emite cuando cambia al menos un atributo de info. Esto refleja el deseo de recibir actualizaciones a medida que se dispone de información más precisa. La excepción a este comportamiento es el caso en que lowEnergyDiscoveryTimeout se establece en 0. Un tiempo de espera de 0 expresa el deseo de controlar la aparición y desaparición de dispositivos de Baja Energía a lo largo del tiempo. Bajo esta condición, la señal deviceDiscovered() se emite incluso si info no ha cambiado desde la última emisión de la señal.
Véase también QBluetoothDeviceInfo::rssi() y lowEnergyDiscoveryTimeout().
[signal] void QBluetoothDeviceDiscoveryAgent::deviceUpdated(const QBluetoothDeviceInfo &info, QBluetoothDeviceInfo::Fields updatedFields)
Esta señal se emite cuando el agente recibe información adicional sobre el dispositivo Bluetooth descrito por info. Las banderas updatedFields indican qué información se ha actualizado.
Durante el descubrimiento, alguna información puede cambiar dinámicamente, como signal strength y manufacturerData. Esta señal le informa de que si su aplicación está mostrando estos datos, puede actualizarlos, en lugar de esperar a que el descubrimiento haya finalizado.
Véase también QBluetoothDeviceInfo::rssi() y lowEnergyDiscoveryTimeout().
QList<QBluetoothDeviceInfo> QBluetoothDeviceDiscoveryAgent::discoveredDevices() const
Devuelve una lista de todos los dispositivos Bluetooth descubiertos.
QBluetoothDeviceDiscoveryAgent::Error QBluetoothDeviceDiscoveryAgent::error() const
Devuelve el último error.
Los posibles errores anteriores se borran al reiniciar la detección.
[signal, since 6.2] void QBluetoothDeviceDiscoveryAgent::errorOccurred(QBluetoothDeviceDiscoveryAgent::Error error)
Esta señal se emite cuando se produce un error durante el descubrimiento de dispositivos Bluetooth. El parámetro error describe el error que se ha producido.
Esta función se introdujo en Qt 6.2.
Véase también error() y errorString().
QString QBluetoothDeviceDiscoveryAgent::errorString() const
Devuelve una descripción legible por humanos del último error.
Véase también error() y errorOccurred().
[signal] void QBluetoothDeviceDiscoveryAgent::finished()
Esta señal se emite cuando finaliza el descubrimiento de dispositivos Bluetooth. La señal no se emitirá si el descubrimiento del dispositivo finaliza con un error.
bool QBluetoothDeviceDiscoveryAgent::isActive() const
Devuelve true si el agente está descubriendo dispositivos Bluetooth, en caso contrario devuelve false.
int QBluetoothDeviceDiscoveryAgent::lowEnergyDiscoveryTimeout() const
Devuelve un tiempo de espera en milisegundos que se aplica a la búsqueda de dispositivos Bluetooth Low Energy. Un valor de -1 implica que la plataforma no admite esta propiedad y no se puede ajustar el tiempo de espera para la búsqueda de dispositivos. Un valor de retorno de 0 implica una búsqueda interminable que debe detenerse manualmente mediante stop().
Véase también setLowEnergyDiscoveryTimeout().
void QBluetoothDeviceDiscoveryAgent::setLowEnergyDiscoveryTimeout(int timeout)
Establece el tiempo máximo de búsqueda de dispositivos Bluetooth Low Energy en timeout en milisegundos. Si timeout es 0 el descubrimiento se ejecuta hasta que se llama a stop().
Esto refleja el hecho de que el proceso de descubrimiento de dispositivos Bluetooth Low Energy es mayoritariamente abierto. La plataforma sigue buscando más dispositivos hasta que la búsqueda se detiene manualmente. El tiempo de espera garantiza que la búsqueda se interrumpa después de timeout milisegundos. Por supuesto, todavía es posible abortar manualmente el descubrimiento llamando a stop().
El nuevo valor del tiempo de espera no surte efecto hasta que se reinicia la búsqueda de dispositivos. Además, el tiempo de espera no afecta a la búsqueda clásica de dispositivos Bluetooth. Dependiendo de la plataforma, la búsqueda clásica puede añadir más tiempo al proceso total de descubrimiento más allá de timeout.
Para un descubrimiento fiable de Bluetooth Low Energy, utilice al menos 40000 milisegundos.
Véase también lowEnergyDiscoveryTimeout().
[slot] void QBluetoothDeviceDiscoveryAgent::start()
Inicia el descubrimiento de dispositivos Bluetooth, si aún no se ha iniciado.
La señal deviceDiscovered() se emite a medida que se descubre cada dispositivo. La señal finished() se emite una vez finalizado el descubrimiento de dispositivos. El descubrimiento utiliza el conjunto máximo de métodos de descubrimiento soportados en la plataforma.
Nota: Esta ranura está sobrecargada. Para conectarse a esta ranura:
// Connect using qOverload:
connect(sender, &SenderClass::signal,
bluetoothDeviceDiscoveryAgent, qOverload<>(&QBluetoothDeviceDiscoveryAgent::start));
// Or using a lambda as wrapper:
connect(sender, &SenderClass::signal,
bluetoothDeviceDiscoveryAgent, [receiver = bluetoothDeviceDiscoveryAgent]() { receiver->start(); });Véase también supportedDiscoveryMethods().
[slot] void QBluetoothDeviceDiscoveryAgent::start(QBluetoothDeviceDiscoveryAgent::DiscoveryMethods methods)
Inicia la detección de dispositivos Bluetooth, si aún no se ha iniciado y se admite la dirección methods proporcionada. El descubrimiento methods limita el alcance de la búsqueda de dispositivos. Por ejemplo, si el servicio o dispositivo de destino es un dispositivo Bluetooth Low Energy, esta función podría utilizarse para limitar la búsqueda a dispositivos Bluetooth Low Energy y, de este modo, reducir significativamente el tiempo de descubrimiento.
Nota: methods sólo determina el tipo de descubrimiento y no implica el filtrado de los resultados. Por ejemplo, la búsqueda puede seguir conteniendo dispositivos bluetooth clásicos a pesar de que methods esté configurado como LowEnergyMethod solamente. Esto puede ocurrir debido a resultados de búsqueda previamente almacenados en caché que pueden incorporarse a los resultados de la búsqueda.
Nota: Algunas plataformas (por ejemplo, Windows) también pueden proporcionar resultados almacenados en caché para los dispositivos que no se anuncian actualmente. Otras plataformas (como iOS) sólo proporcionan información sobre los dispositivos que se anuncian actualmente. Puedes almacenar el UUID del dispositivo recibido (o la dirección Bluetooth) en el primer descubrimiento, y utilizarlo más tarde para establecer una conexión directamente (consulta QBluetoothDeviceInfo). De esta forma, las aplicaciones pueden omitir las fases posteriores de descubrimiento de dispositivos. El uso de la dirección Bluetooth requiere que la dirección Bluetooth del dispositivo remoto no cambie.
Nota: Esta ranura está sobrecargada. Para conectarse a esta ranura:
// Connect using qOverload:
connect(sender, &SenderClass::signal,
bluetoothDeviceDiscoveryAgent, qOverload(&QBluetoothDeviceDiscoveryAgent::start));
// Or using a lambda as wrapper:
connect(sender, &SenderClass::signal,
bluetoothDeviceDiscoveryAgent, [receiver = bluetoothDeviceDiscoveryAgent](QBluetoothDeviceDiscoveryAgent::DiscoveryMethods methods) { receiver->start(methods); }); [slot] void QBluetoothDeviceDiscoveryAgent::stop()
Detiene el descubrimiento de dispositivos Bluetooth. La señal cancel() se emite una vez cancelado el descubrimiento de dispositivos. start() puede llamarse antes de recibir la señal de cancelación. Una vez que se ha llamado a start(), la señal de cancelación del descubrimiento anterior se descartará.
[static] QBluetoothDeviceDiscoveryAgent::DiscoveryMethods QBluetoothDeviceDiscoveryAgent::supportedDiscoveryMethods()
Esta función devuelve los métodos de descubrimiento admitidos por la plataforma actual. Se puede utilizar para limitar el alcance del descubrimiento de dispositivos.
© 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.