class QBluetoothDeviceDiscoveryAgent#

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

Inheritance diagram of 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 支持 Low Energy discovery)上,发现过程将限制搜索到受支持的类型。

备注

自 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

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

QBluetoothDeviceDiscoveryAgent.LowEnergyMethod

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

__init__(deviceAdapter[, parent=None])#
参数:

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

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

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

另请参阅

error()

__init__([parent=None])
参数:

parentQObject

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

canceled()#

当调用 stop() 时发出此信号以终止设备发现。

deviceDiscovered(info)#
参数:

infoQBluetoothDeviceInfo

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

一旦收集到最重要的设备信息,就会立即发出信号。然而,只要没有发出finished()信号,信息收集就会继续,即使是已经发现的设备。这尤其是对信号强度信息(RSSI)和生产商数据的更新而言。如果用例需要连续的生产商数据或RSSI更新,建议在发现完成后通过discoveredDevices()检索设备信息,或者监听deviceUpdated()信号。

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

deviceUpdated(info, updatedFields)#
参数:

当代理接收到有关由info描述的蓝牙设备更多信息时,将发出此信号。更新的字段标志指示哪些信息已被更新。

在发现期间,某些信息可以动态地变化,例如信号 强度制造商数据。此信号告知您,如果您的应用程序正在显示这些数据,它们可以被更新,而不是等待发现完成。

discoveredDevices()#
返回类型:

QBluetoothDeviceInfo 对象列表

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

error()#
返回类型:

错误

返回最后一个错误。

在重新开始发现时,将清除任何可能之前发生的错误。

errorOccurred(error)#
参数:

错误Error

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

另请参阅

error() errorString()

errorString()#
返回类型:

str

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

另请参阅

error() errorOccurred()

finished()#

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

isActive()#
返回类型:

bool

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

lowEnergyDiscoveryTimeout()#
返回类型:

int

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

setLowEnergyDiscoveryTimeout(msTimeout)#
参数:

msTimeout – int

将蓝牙低功耗设备搜索的最大搜索时间设置为毫秒。如果timeout0,则搜索会一直运行到调用stop()方法为止。

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

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

为确保可靠的蓝牙低功耗搜索,至少使用40000毫秒。

start()#

开始蓝牙设备搜索,如果尚未开始。

在找到每个设备时,会发出deviceDiscovered()信号。设备发现完成后会发出finished()信号。搜索将利用平台支持的最多搜索方法。

start(method)
参数:

methodDiscoveryMethod的组合

开始蓝牙设备搜索,如果尚未开始,并且提供的methods被支持。搜索methods限制了设备搜索的范围。例如,如果目标服务或设备是蓝牙低功耗设备,此功能可以用来限制搜索到蓝牙低功耗设备,从而显著减少搜索时间。

备注

methods只决定了搜索的类型,并不意味着过滤结果。例如,即使methods设置为只为LowEnergyMethod,搜索中也可能仍然包含经典蓝牙设备。这可能是由于先前缓存的搜索结果可能包含在搜索结果中。

stop()#

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

static supportedDiscoveryMethods()#
返回类型:

DiscoveryMethod的组合

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