QBluetoothDeviceDiscoveryAgent 类

QBluetoothDeviceDiscoveryAgent 类用于发现附近的蓝牙设备。 更多...

头文件 #include <QBluetoothDeviceDiscoveryAgent>
qmakeQT += bluetooth
继承 QObject

公共类型

枚举DiscoveryMethod { NoMethod, ClassicMethod, LowEnergyMethod }
标志DiscoveryMethods
枚举Error { NoError, PoweredOffError, InputOutputError, InvalidBluetoothAdapterError, UnsupportedPlatformError, …, UnknownError }

公共函数

QBluetoothDeviceDiscoveryAgent(QObject *parent = nullptr)
QBluetoothDeviceDiscoveryAgent(const QBluetoothAddress &deviceAdapter, QObject *parent = nullptr)
虚拟~QBluetoothDeviceDiscoveryAgent()
QList<QBluetoothDeviceInfo>discoveredDevices() const
QBluetoothDeviceDiscoveryAgent::Errorerror() const
QStringerrorString() const
boolisActive() const
intlowEnergyDiscoveryTimeout() const
voidsetLowEnergyDiscoveryTimeout(int timeout)

公共槽

voidstart()
voidstart(QBluetoothDeviceDiscoveryAgent::DiscoveryMethods methods)
voidstop()

信号

voidcanceled()
voiddeviceDiscovered(const QBluetoothDeviceInfo &info)
voiddeviceUpdated(const QBluetoothDeviceInfo &info, QBluetoothDeviceInfo::Fields updatedFields)
(since 6.2) voiderrorOccurred(QBluetoothDeviceDiscoveryAgent::Error error)
voidfinished()

静态公共成员

QBluetoothDeviceDiscoveryAgent::DiscoveryMethodssupportedDiscoveryMethods()

详细描述

要发现附近的蓝牙设备

void MyClass::startDeviceDiscovery()
{

    // Create a discovery agent and connect to its signals
    QBluetoothDeviceDiscoveryAgent *discoveryAgent = new QBluetoothDeviceDiscoveryAgent(this);
    connect(discoveryAgent, SIGNAL(deviceDiscovered(QBluetoothDeviceInfo)),
            this, SLOT(deviceDiscovered(QBluetoothDeviceInfo)));

    // Start a discovery
    discoveryAgent->start();

    //...
}

// In your local slot, read information about the found devices
void MyClass::deviceDiscovered(const QBluetoothDeviceInfo &device)
{
    qDebug() << "Found new device:" << device.name() << '(' << device.address().toString() << ')';
}

要异步获取结果,连接到deviceDiscovered()信号。要获取已发现的所有设备的列表,请在finished()信号后调用discoveredDevices()。

此类可用于发现经典和低能耗蓝牙设备。可以通过QBluetoothDeviceInfo::coreConfigurations()属性确定单个设备类型。在大多数情况下,discoveredDevices()返回的列表包含这两种类型的设备。但是,并非所有平台都能检测到这两种类型的设备。在具有此限制的平台(例如,iOS仅支持低能耗发现)上,发现过程将仅限于支持的类型。

注意:由于Android 6.0开始,检测设备需要ACCESS_COARSE_LOCATION。

注意:Win32后端目前不支持接收到信号的强度指示器(RSSI),以及制造商特定的数据,或蓝牙LE设备在发现后宣传的其他数据更新。

成员类型文档

枚举 QBluetoothDeviceDiscoveryAgent::DiscoveryMethod
标志 QBluetoothDeviceDiscoveryAgent::DiscoveryMethods

此枚举描述了QBluetoothDeviceDiscoveryAgent采用的发现方法类型。

常量描述
QBluetoothDeviceDiscoveryAgent::NoMethod0x0发现不可行。没有可用的方法被支持。
QBluetoothDeviceDiscoveryAgent::ClassicMethod0x01发现过程搜索蓝牙经典(基速率)设备。
QBluetoothDeviceDiscoveryAgent::LowEnergyMethod0x02发现过程搜索蓝牙低能耗设备。

The DiscoveryMethods类型是DiscoveryMethod的别名,表示QFlags。它存储了一个DiscoveryMethod值的或组合。

另请参阅:supportedDiscoveryMethods().

枚举 QBluetoothDeviceDiscoveryAgent::Error

指示在蓝牙设备发现期间找到的所有可能错误条件。

常量描述
QBluetoothDeviceDiscoveryAgent::NoError0没有发生错误。
QBluetoothDeviceDiscoveryAgent::PoweredOffError2蓝牙适配器已关闭电源,请先开机再进行发现。
QBluetoothDeviceDiscoveryAgent::InputOutputError1从设备写入或读取导致错误。
QBluetoothDeviceDiscoveryAgent::InvalidBluetoothAdapterError3传递的本地适配器地址与任何本地蓝牙设备的物理适配器地址不匹配。
QBluetoothDeviceDiscoveryAgent::UnsupportedPlatformError(自Qt 5.5)4当前平台不支持或未实现设备发现。在接收到start()调用后设置此错误。此类情况的示例是iOS低于5.0的版本,完全不支持蓝牙设备搜索。
QBluetoothDeviceDiscoveryAgent::UnsupportedDiscoveryMethod(自Qt 5.8)5请求的发现方法之一不受当前平台支持。
QBluetoothDeviceDiscoveryAgent::LocationServiceTurnedOffError(自Qt 6.2)6位置服务已关闭。当位置服务关闭时,无法使用蓝牙API。
QBluetoothDeviceDiscoveryAgent::MissingPermissionsError(自Qt 6.4)7操作系统请求用户未授予的权限。
QBluetoothDeviceDiscoveryAgent::UnknownError100发生了未知错误。

成员函数文档

[显式] QBluetoothDeviceDiscoveryAgent::QBluetoothDeviceDiscoveryAgent(QObject *parent = nullptr)

使用父级创建一个新的蓝牙设备发现代理。

[显式] QBluetoothDeviceDiscoveryAgent::QBluetoothDeviceDiscoveryAgent(const QBluetoothAddress &deviceAdapter, QObject *parent = nullptr)

使用父级创建一个蓝牙设备发现代理。

使用deviceAdapter进行设备搜索。如果deviceAdapter使用默认构造器,则生成的QBluetoothDeviceDiscoveryAgent对象将使用本地默认蓝牙适配器。

如果指定了一个不是本地适配器的deviceAdapter,将设置错误()为无效蓝牙适配器错误。因此,建议在使用此构造函数后立即测试错误标志。

另请参阅错误

[虚函数 noexcept] QBluetoothDeviceDiscoveryAgent::~QBluetoothDeviceDiscoveryAgent()

~QBluetoothDeviceDiscoveryAgent()析构函数

[信号] void QBluetoothDeviceDiscoveryAgent::canceled()

当使用停止()调用设备发现被终止时,发出此信号。

[信号] void QBluetoothDeviceDiscoveryAgent::deviceDiscovered(const QBluetoothDeviceInfo &info)

当描述info的蓝牙设备被发现时,发出此信号。

信号在收集最关键的设备信息后立即发出。然而,只要未发出完成()信号,信息收集将一直继续,即使是已经发现的设备。这尤其适用于信号强度信息(RSSI)和制造商数据更新。如果用例需要在单个数据或RSSI更新,建议在发现完成或监听设备更新()信号后,通过discoveredDevices()获取设备信息。

如果lowEnergyDiscoveryTimeout()大于0,则仅当info至少有一个属性更改时才发出信号。这反映了希望随着更多精确信息的可用性而收到更新。此行为的例外情况是当lowEnergyDiscoveryTimeout设置为0时。将0设置为超时时长表示希望随着时间的推移监控低功耗设备的出现和消失。在此条件下,即使在info自上次信号发出后未更改,也会发出deviceDiscovered()信号。

另请参阅QBluetoothDeviceInfo::rssi()和lowEnergyDiscoveryTimeout

[信号] void QBluetoothDeviceDiscoveryAgent::deviceUpdated(const QBluetoothDeviceInfo &info, QBluetoothDeviceInfo::Fields updatedFields)

当代理收到有关由info描述的蓝牙设备的更多信息时,发出此信号。更新标志updatedFields告诉哪些信息已被更新。

在搜索过程中,一些信息可能会动态更改,例如 信号强度制造商数据。此信号告知您,如果您的应用程序正在显示这些数据,它可以被更新,而不必等待搜索完成。

另请参阅QBluetoothDeviceInfo::rssi()和lowEnergyDiscoveryTimeout

QList<QBluetoothDeviceInfo> QBluetoothDeviceDiscoveryAgent::discoveredDevices() const

返回已搜索到的所有蓝牙设备的列表。

QBluetoothDeviceDiscoveryAgent::Error QBluetoothDeviceDiscoveryAgent::error() const

返回最后发生的错误。

在重新启动搜索时,将清除任何可能之前的错误。

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

在蓝牙设备搜索过程中发生错误时发出此信号。错误参数描述了发生的错误。

此功能从 Qt 6.2 开始引入。

另请参阅 error() 和 errorString

QString QBluetoothDeviceDiscoveryAgent::errorString() const

返回最后错误的可读描述。

另请参阅 error() 和 errorOccurred

[signal] void QBluetoothDeviceDiscoveryAgent::finished()

当蓝牙设备搜索完成时发出此信号。如果在出现错误的情况下终止设备搜索,则不会发出该信号。

bool QBluetoothDeviceDiscoveryAgent::isActive() const

如果代理当前正在搜索蓝牙设备,则返回 true,否则返回 false。

int QBluetoothDeviceDiscoveryAgent::lowEnergyDiscoveryTimeout() const

返回应用于蓝牙低能耗设备搜索的毫秒数超时。值 -1 表示平台不支持此属性,无法调整设备搜索的超时。返回值 0 表示永久搜索,必须手动通过 stop() 停止。

另请参阅 setLowEnergyDiscoveryTimeout

void QBluetoothDeviceDiscoveryAgent::setLowEnergyDiscoveryTimeout(int timeout)

将蓝牙低能耗设备搜索的最大搜索时间设置为 timeout 毫秒。如果 timeout0,则搜索将在 stop() 被调用之前一直运行。

这反映了蓝牙低能耗设备的搜索过程大多数是开放式的。平台继续寻找更多设备,直到手动停止搜索。超时确保在 timeout 毫秒后停止搜索。当然,您仍然可以通过调用 stop() 来手动停止搜索。

新的超时值将在设备搜索重新启动后生效。此外,超时值不会影响经典蓝牙设备的搜索。根据平台的不同,经典搜索可能需要在总发现过程中额外增加超时的时间。

为了可靠地发现低功耗蓝牙,至少使用40000毫秒。

另请参阅 低功耗发现超时

[slot] void QBluetoothDeviceDiscoveryAgent::start()

如果在未启动的情况下开始蓝牙设备搜索。

在发现每个设备时发出 deviceDiscovered() 信号。设备发现完成时发出 finished() 信号。发现利用平台支持的最大发现方法集。

另请参阅:supportedDiscoveryMethods().

[slot] void QBluetoothDeviceDiscoveryAgent::start(QBluetoothDeviceDiscoveryAgent::DiscoveryMethods methods)

如果在未启动的情况下开始蓝牙设备搜索,并且提供的 methods 受支持。发现 methods 限制了设备搜索的范围。例如,如果目标服务或设备是低功耗蓝牙设备,可以使用此功能将搜索限制为蓝牙低功耗设备,从而显着减少发现时间。

注意: methods 仅确定发现类型,并不意味着结果过滤。例如,即使将方法设置为仅 LowEnergyMethod,搜索仍可能包含经典蓝牙设备。这可能是因为在搜索结果中将以前缓存的结果包含在内。

[slot] void QBluetoothDeviceDiscoveryAgent::stop()

停止蓝牙设备搜索。一旦设备搜索被取消,就会发出 cancel() 信号。可能会在收到取消信号之前调用 start()。一旦调用 start(),先前发现的取消信号将被丢弃。

[static] QBluetoothDeviceDiscoveryAgent::DiscoveryMethods QBluetoothDeviceDiscoveryAgent::supportedDiscoveryMethods()

此函数返回当前平台支持的发现方法。可以使用它来限制设备发现的范围。

© 2024 Qt 公司有限公司。本文件中包含的文档贡献是各自所有者的版权。提供的文档是根据自由软件基金会发布的 GNU 自由文档许可证版本 1.3 条款许可的。Qt 和相关标志是芬兰的 Qt 公司及其在全球的子公司的商标。所有其他商标均为各自所有者所有。