PySide6.QtBluetooth.QBluetoothServiceDiscoveryAgent

class QBluetoothServiceDiscoveryAgent

QBluetoothServiceDiscoveryAgent 类使您能够查询蓝牙服务。更多

PySide6.QtBluetooth.QBluetoothServiceDiscoveryAgent 的继承图

概要

方法

插槽

信号

注意

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

详细描述

警告

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

发现过程依赖于蓝牙服务发现过程(SDP)。以下是查询所有可连接的蓝牙设备提供的服务所需的步骤:

def startServiceDiscovery(self):

    # Create a discovery agent and connect to its signals
    discoveryAgent = QBluetoothServiceDiscoveryAgent(self)
    connect(discoveryAgent, SIGNAL(serviceDiscovered(QBluetoothServiceInfo)),
            self, SLOT(serviceDiscovered(QBluetoothServiceInfo)))
    # Start a discovery
    discoveryAgent.start()
    #...

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

    print("Found service():", service.serviceName())
             << '(' << service.device().address().toString() << ')'

默认情况下,执行的是最小服务发现。在此模式下,返回的QBluetoothServiceInfo对象保证仅包含设备和服务的UUID信息。根据平台和设备的能力,其他服务信息也可能可用。最小服务发现模式依赖于平台的缓存SDP数据。因此,尽管设备物理上可用,但此发现可能找不到设备。在这种情况下,必须执行完整发现以强制更新平台缓存。然而,对于大多数用例,最小发现是足够的,因为它更快,并且其他需要最新信息的类(如connectToService())将在需要时执行额外的发现。如果需要完整的服务信息,请将FullDiscovery作为discoveryMode参数传递给start()

这个类可能在内部使用QBluetoothDeviceDiscoveryAgent来查找未知设备。

如果目标设备是经典蓝牙和低功耗蓝牙的组合设备,服务发现也可能找到低功耗蓝牙服务。这些设备需要通过SDP广告其低功耗蓝牙服务。如果目标设备仅支持低功耗蓝牙服务,则可能不会通过SDP广告这些服务。应使用QLowEnergyController类在低功耗设备上执行服务发现。

在iOS上,由于平台没有暴露允许访问QBluetoothServiceDiscoveryAgent相关功能的API,因此无法使用此类。

class Error

此枚举描述了在服务发现过程中可能发生的错误。

常量

描述

QBluetoothServiceDiscoveryAgent.NoError

没有发生错误。

QBluetoothServiceDiscoveryAgent.PoweredOffError

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

QBluetoothServiceDiscoveryAgent.InputOutputError

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

QBluetoothServiceDiscoveryAgent.InvalidBluetoothAdapterError

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

QBluetoothServiceDiscoveryAgent.MissingPermissionsError

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

QBluetoothServiceDiscoveryAgent.UnknownError

发生了一个未知错误。

class DiscoveryMode

此枚举描述了服务发现模式。

常量

描述

QBluetoothServiceDiscoveryAgent.MinimalDiscovery

执行最小服务发现。返回的QBluetoothServiceInfo对象可能不完整,仅保证包含设备和服务UUID信息。由于最小发现依赖于缓存的SDP数据,它可能无法找到物理存在的设备,直到执行FullDiscovery

QBluetoothServiceDiscoveryAgent.FullDiscovery

执行完整的服务发现。

__init__([parent=None])
Parameters:

父对象QObject

使用parent构造一个新的QBluetoothServiceDiscoveryAgent。搜索通过本地默认的蓝牙适配器执行。

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

deviceAdapterparent 构造一个新的 QBluetoothServiceDiscoveryAgent

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

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

注意

在WinRT上,传递的适配器地址将被忽略。

注意

在Android上传递任何deviceAdapter地址是没有意义的,因为Android 6.0或更高版本不再发布本地蓝牙地址。因此,传递的适配器地址永远无法与本地适配器地址匹配。因此,随后的调用start()将始终触发InvalidBluetoothAdapterError

另请参阅

error()

canceled()

当通过调用stop()取消服务发现时,会触发此信号。

clear()

清除之前服务发现的结果并重置uuidFilter()。此函数在进行中的服务发现期间不执行任何操作(参见isActive())。

另请参阅

discoveredServices()

discoveredServices()
Return type:

QBluetoothServiceInfo 的列表

返回所有已发现服务的列表。

此服务列表累积了从多次调用start()中发现的新服务。除非调用clear(),否则列表的大小不会减少。这意味着如果远程蓝牙设备在两次连续调用start()之间超出范围,列表可能包含过时的条目。

注意

在更改发现模式之前,应始终清除服务列表。

另请参阅

clear()

error()
Return type:

错误

返回上次发生的错误类型。如果服务发现是针对单个remoteAddress()进行的,它将返回尝试在该设备上发现服务时发生的错误。如果未设置remoteAddress()并且通过扫描发现设备,则在单个设备上进行服务发现时的错误不会被保存,也不会发出信号。在这种情况下,错误是相当正常的,因为某些设备可能不会响应发现或可能不再在范围内。此类错误被抑制。如果没有返回服务,可以假定无法发现任何服务。

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

errorOccurred(error)
Parameters:

错误Error

当发生error时,会发出此信号。error参数描述了发生的错误。

errorString()
Return type:

字符串

返回服务发现期间发生的最后一个错误的人类可读描述。

另请参阅

error() errorOccurred()

finished()

当蓝牙服务发现完成时,会发出此信号。

finished()信号不同,即使在服务发现过程中发生错误,此信号也会被发出。因此,建议检查errorOccurred()信号以评估服务发现是否成功。

isActive()
Return type:

布尔

如果服务发现当前处于活动状态,则返回true;否则返回false。可以通过调用stop()来停止活动的发现。

remoteAddress()
Return type:

QBluetoothAddress

返回远程设备地址。如果未调用setRemoteAddress(),该函数将返回一个默认构造的QBluetoothAddress

另请参阅

setRemoteAddress()

serviceDiscovered(info)
Parameters:

信息QBluetoothServiceInfo

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

注意

传递的QBluetoothServiceInfo参数可能包含一个蓝牙低功耗服务,如果目标设备通过SDP广告该服务。这是支持经典蓝牙(BaseRate)和低功耗服务的设备所必需的。

另请参阅

coreConfigurations()

setRemoteAddress(address)
Parameters:

地址QBluetoothAddress

Return type:

布尔

将远程设备地址设置为address。如果address是默认构造的,服务将在所有可联系的蓝牙设备上被发现。只有在没有进行服务发现时才能设置新的远程地址;否则此函数返回false。

在某些平台上,服务发现可能会导致配对请求。因此,不建议在所有设备上进行服务发现。此函数可用于将服务发现限制在特定设备上。

另请参阅

remoteAddress()

setUuidFilter(uuid)
Parameters:

uuidQBluetoothUuid

这是一个重载的成员函数,为了方便提供。

将UUID过滤器设置为包含单个元素uuid的列表。匹配适用于服务的ServiceIdServiceClassIds属性。

另请参阅

uuidFilter()

setUuidFilter(uuids)
Parameters:

uuids – QBluetoothUuid 的列表

将UUID过滤器设置为uuids。只有与uuids中的UUID匹配的服务才会被返回。匹配适用于服务的ServiceIdServiceClassIds属性。

一个空的UUID列表等同于仅包含PublicBrowseGroup的列表。

另请参阅

uuidFilter()

start([mode=QBluetoothServiceDiscoveryAgent.DiscoveryMode.MinimalDiscovery])
Parameters:

modeDiscoveryMode

启动服务发现。mode 指定要执行的服务发现类型。

在某些平台上,设备发现可能会导致配对请求。

另请参阅

DiscoveryMode

stop()

停止服务发现过程。一旦搜索停止,将发出canceled()信号。

uuidFilter()
Return type:

QBluetoothUuid的列表

返回UUID过滤器。

另请参阅

setUuidFilter()