PySide6.QtBluetooth.QBluetooth设备发现代理

class QBluetoothDeviceDiscoveryAgent

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

PySide6.QtBluetooth.QBluetoothDeviceDiscoveryAgent 的继承图

概要

方法

插槽

信号

静态函数

注意

本文档可能包含从C++自动翻译到Python的代码片段。我们始终欢迎对代码片段翻译的贡献。如果您发现翻译问题,您也可以通过在我们的https:/bugreports.qt.io/projects/PYSIDE上创建工单来告知我们。

详细描述

警告

本节包含从C++自动翻译到Python的代码片段,可能包含错误。

发现附近的蓝牙设备:

def startDeviceDiscovery(self):

    # Create a discovery agent and connect to its signals
    discoveryAgent = QBluetoothDeviceDiscoveryAgent(self)
    connect(discoveryAgent, SIGNAL(deviceDiscovered(QBluetoothDeviceInfo)),
            self, SLOT(deviceDiscovered(QBluetoothDeviceInfo)))
    # Start a discovery
    discoveryAgent.start()
    #...

# In your local slot, read information about the found devices
def deviceDiscovered(self, device):

    print("Found device():", device.name(), '(', device.address().toString(), ')')

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

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

注意

自 Android 6.0 起,检测设备的能力需要 ACCESS_COARSE_LOCATION。

注意

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

class Error

指示在蓝牙设备发现过程中发现的所有可能的错误条件。

常量

描述

QBluetoothDeviceDiscoveryAgent.NoError

没有发生错误。

QBluetoothDeviceDiscoveryAgent.PoweredOffError

蓝牙适配器已关闭,请在执行发现之前将其打开。

QBluetoothDeviceDiscoveryAgent.InputOutputError

从设备读取或写入时发生错误。

QBluetoothDeviceDiscoveryAgent.InvalidBluetoothAdapterError

传递的本地适配器地址与任何本地蓝牙设备的物理适配器地址不匹配。

QBluetoothDeviceDiscoveryAgent.UnsupportedPlatformError

设备发现在当前平台上不可用或未实现。该错误是在调用start()时设置的。例如,iOS 5.0以下的版本根本不支持蓝牙设备搜索。

QBluetoothDeviceDiscoveryAgent.UnsupportedDiscoveryMethod

当前平台不支持所请求的发现方法之一。

QBluetoothDeviceDiscoveryAgent.LocationServiceTurnedOffError

定位服务已关闭。当定位服务关闭时,无法使用蓝牙API。

QBluetoothDeviceDiscoveryAgent.MissingPermissionsError

操作系统请求的权限未被用户授予。

QBluetoothDeviceDiscoveryAgent.UnknownError

发生了一个未知错误。

class DiscoveryMethod

(继承自 enum.Flag) 此枚举描述了由 QBluetoothDeviceDiscoveryAgent 使用的发现方法的类型。

常量

描述

QBluetoothDeviceDiscoveryAgent.NoMethod

无法进行发现。不支持任何可用的方法。

QBluetoothDeviceDiscoveryAgent.ClassicMethod

发现过程搜索蓝牙经典(BaseRate)设备。

QBluetoothDeviceDiscoveryAgent.LowEnergyMethod

发现过程搜索蓝牙低能耗设备。

__init__([parent=None])
Parameters:

父对象QObject

使用父对象 parent 构造一个新的蓝牙设备发现代理。

__init__(deviceAdapter[, parent=None])
Parameters:

使用parent构造一个新的蓝牙设备发现代理。

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

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

另请参阅

error()

canceled()

当设备发现被调用stop()中止时,会发出此信号。

deviceDiscovered(info)
Parameters:

信息QBluetoothDeviceInfo

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

一旦最重要的设备信息被收集,信号就会立即发出。然而,只要finished()信号尚未发出,即使对于已经发现的设备,信息收集也会继续。这对于信号强度信息(RSSI)和制造商数据更新尤其如此。如果用例需要持续的制造商数据或RSSI更新,建议在发现完成后通过discoveredDevices()检索设备信息,或者监听deviceUpdated()信号。

如果lowEnergyDiscoveryTimeout()大于0,则只有当info的至少一个属性发生变化时,信号才会被发出。这反映了希望在更精确的信息可用时接收更新的愿望。此行为的例外情况是当lowEnergyDiscoveryTimeout设置为0时。超时时间为0表示希望随着时间的推移监控低能耗设备的出现和消失。在这种情况下,即使info自上次信号发出以来没有变化,deviceDiscovered()信号也会被发出。

deviceUpdated(info, updatedFields)
Parameters:

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

在发现过程中,一些信息可能会动态变化,例如 signal strengthmanufacturerData。这个信号告诉你,如果你的应用程序正在显示这些数据,它可以被更新,而不是等到发现过程结束。

discoveredDevices()
Return type:

QBluetoothDeviceInfo的列表

返回所有发现的蓝牙设备的列表。

error()
Return type:

错误

返回最后一个错误。

重新启动发现时,任何可能的先前错误都会被清除。

errorOccurred(error)
Parameters:

错误Error

当在蓝牙设备发现过程中发生error时,会发出此信号。error参数描述了发生的错误。

另请参阅

error() errorString()

errorString()
Return type:

字符串

返回最后一个错误的人类可读描述。

另请参阅

error() errorOccurred()

finished()

当蓝牙设备发现完成时,会发出此信号。如果设备发现以错误结束,则不会发出此信号。

isActive()
Return type:

布尔

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

lowEnergyDiscoveryTimeout()
Return type:

整数

返回一个以毫秒为单位的超时时间,该时间应用于蓝牙低功耗设备搜索。值为-1表示平台不支持此属性,设备搜索的超时时间无法调整。返回值为0表示搜索永不结束,必须通过stop()手动停止。

setLowEnergyDiscoveryTimeout(msTimeout)
Parameters:

msTimeout – int

设置蓝牙低功耗设备搜索的最大搜索时间为timeout毫秒。如果timeout0,则发现过程将持续到调用stop()为止。

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

新的超时值在设备搜索重新启动之前不会生效。此外,超时不会影响经典蓝牙设备搜索。根据平台的不同,经典搜索可能会在timeout之外增加更多的时间到整个发现过程中。

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

start()

如果尚未启动,则开始蓝牙设备发现。

每当发现一个设备时,deviceDiscovered()信号就会被发出。一旦设备发现完成,finished()信号就会被发出。发现过程利用了平台上支持的最大发现方法集。

start(method)
Parameters:

methodDiscoveryMethod 的组合

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

注意

methods 仅确定发现的类型,并不意味着对结果进行过滤。例如,尽管 methods 设置为仅 LowEnergyMethod,搜索可能仍然包含经典蓝牙设备。这可能是由于之前缓存的搜索结果可能被纳入搜索结果中。

stop()

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

static supportedDiscoveryMethods()
Return type:

DiscoveryMethod的组合

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