class QBluetoothServiceDiscoveryAgent#

QBluetoothServiceDiscoveryAgent 允许您查询蓝牙服务。更多信息

Inheritance diagram of 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作为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__(deviceAdapter[, parent=None])#
参数:

deviceAdapterparent构建一个新的QBluetoothServiceDiscoveryAgent

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

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

注意

在WinRT上,将会忽略传入的适配器地址。

注意

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

另请参阅

错误:

__init__([parent=None])
参数:

parentQObject

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

canceled()#

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

clear()#

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

另请参阅

discoveredServices()

discoveredServices()#
返回类型:

队列中QBluetoothServiceInfo

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

此服务列表累积来自多次调用start()的新发现服务。除非调用clear(),否则列表大小不会减小。这意味着如果在两次调用start()之间远程蓝牙设备移出范围,列表可能会包含陈旧条目。

注意

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

另请参阅

清除:

error()#
返回类型:

错误:

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

在重新启动查找时,任何可能存在的先前错误都会被清除。

errorOccurred(error)#
参数:

错误Error

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

errorString()#
返回类型:

字符串

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

另请参阅

error() errorOccurred()

finished()#

在蓝牙服务发现完成时发出此信号。

finished信号不同,即使发生错误,此信号也会发出。因此,建议检查errorOccurred信号以评估服务发现的成功。

isActive()#
返回类型:

布尔值

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

remoteAddress()#
返回类型:

QBluetoothAddress

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

另请参阅

setRemoteAddress()

serviceDiscovered(info)#
参数:

infoQBluetoothServiceInfo

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

注意

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

另请参阅

coreConfigurations()

setRemoteAddress(address)#
参数:

addressQBluetoothAddress

返回类型:

布尔值

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

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

另请参阅

remoteAddress()

setUuidFilter(uuid)#
参数:

uuidQBluetoothUuid

这是一个用于方便的重载成员函数。

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

另请参阅

uuidFilter()

setUuidFilter(uuids)
参数:

uuids – .QBluetoothUuid列表

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

空UUID列表等效于只包含PublicBrowseGroup的列表。

另请参阅

uuidFilter()

start([mode=QBluetoothServiceDiscoveryAgent.DiscoveryMode.MinimalDiscovery])#
参数:

modeDiscoveryMode

开始服务查找。mode指定要执行的服务查找类型。

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

另请参阅

DiscoveryMode

stop()#

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

uuidFilter()#
返回类型:

.list of QBluetoothUuid

返回UUID过滤器。

另请参阅

setUuidFilter()