一、描述
QBluetoothServiceDiscoveryAgent 类用于查询蓝牙服务。
查询步骤:
- 创建一个 QBluetoothServiceDiscoveryAgent 的实例,
- 连接到 serviceDiscovered() 或 finished() 信号,
- 调用 start()。
#include "widget.h"
#include "ui_widget.h"
#include <QBluetoothServiceDiscoveryAgent>
#include <QDebug>
Widget::Widget(QWidget *parent)
: QWidget(parent)
, ui(new Ui::Widget)
{
ui->setupUi(this);
discoveryAgent = new QBluetoothServiceDiscoveryAgent(this);
connect(discoveryAgent, &QBluetoothServiceDiscoveryAgent::serviceDiscovered,this, &Widget::serviceDiscovered);
}
void Widget::serviceDiscovered(const QBluetoothServiceInfo &service)
{
qDebug() << "Found new service:" << service.serviceName()
<< '(' << service.device().address().toString() << ')';
}
Widget::~Widget()
{
delete ui;
}
void Widget::on_pushButton_clicked()
{
discoveryAgent->start();
}
在 iOS 上,不能使用此类,因为平台没有公开可能允许访问 QBluetoothServiceDiscoveryAgent 相关功能的 API。
二、类型成员
1、enum QBluetoothServiceDiscoveryAgent::DiscoveryMode:服务查询模式。
- MinimalDiscovery:最小服务查询。返回的 QBluetoothServiceInfo 对象可能不完整,仅保证包含设备和服务 UUID 信息。
- FullDiscovery:完整的服务查询。
2、enum QBluetoothServiceDiscoveryAgent::Error:查询期间可能发生的错误。
- NoError:没有发生错误。
- PoweredOffError:蓝牙适配器已断电。
- InputOutputError:写入或读取设备错误。
- InvalidBluetoothAdapterError:传递的本地适配器地址与任何本地蓝牙设备的物理适配器地址不匹配。
- UnknownError:发生未知错误。
三、成员函数
1、【信号】void canceled()
当通过调用 stop() 取消查询时会触发此信号。
2、void clear()
清除先前查询的结果并重置 uuidFilter()。
3、【信号】void errorOccurred(QBluetoothServiceDiscoveryAgent::Error error)
发生错误时发出此信号。
4、【信号】void finished()
查询完成时发出此信号。
与 QBluetoothDeviceDiscoveryAgent::finished() 信号不同,此信号会在查询期间发生错误时发出。因此建议检查 error() 信号来评估查询的结果。
5、【信号】void serviceDiscovered(const QBluetoothServiceInfo &info)
当查询到由 info 描述的蓝牙服务时,会发出此信号。
6、void start(QBluetoothServiceDiscoveryAgent::DiscoveryMode mode = MinimalDiscovery)
启动蓝牙服务查询。在某些平台上,可能会导致配对请求。
7、void stop()
停止蓝牙服务查询。
8、QList<QBluetoothServiceInfo> discoveredServices()
所有已查询的蓝牙服务列表。
这个服务列表累积了从多次调用 start() 中新发现的服务。除非 clear() 被调用,否则列表不能减小大小。
9、QBluetoothServiceDiscoveryAgent::Error error()
返回上次发生的错误类型。
10、QString errorString()
返回最后一个错误的可读描述。
11、bool isActive()
是否正在查询。
12、bool setRemoteAddress(const QBluetoothAddress &address) /
QBluetoothAddress remoteAddress()
设置远程设备地址。如果地址是默认构造的,则将在所有可联系的蓝牙设备上查询服务。
在某些平台上,服务查询可能会导致配对请求。因此,不建议在所有设备上进行服务查询。此功能可用于将服务查询限制到特定设备。
13、void setUuidFilter(const QList<QBluetoothUuid> &uuids)
void setUuidFilter(const QBluetoothUuid &uuid)
QList<QBluetoothUuid> uuidFilter()
设置过滤的 uuid。查询时只会返回与 uuids 中的 UUID 匹配的服务。