PySide6.QtBluetooth.QBluetoothServiceDiscoveryAgent¶
- class QBluetoothServiceDiscoveryAgent¶
QBluetoothServiceDiscoveryAgent
类使您能够查询蓝牙服务。更多…概要¶
方法¶
def
__init__()
def
error()
def
errorString()
def
isActive()
def
remoteAddress()
def
setUuidFilter()
def
uuidFilter()
插槽¶
信号¶
def
canceled()
def
errorOccurred()
def
finished()
注意
本文档可能包含从C++自动翻译到Python的代码片段。我们始终欢迎对代码片段翻译的贡献。如果您发现翻译问题,您也可以通过在我们的https:/bugreports.qt.io/projects/PYSIDE上创建工单来告知我们。
详细描述¶
警告
本节包含从C++自动翻译到Python的代码片段,可能包含错误。
发现过程依赖于蓝牙服务发现过程(SDP)。以下是查询所有可连接的蓝牙设备提供的服务所需的步骤:
创建一个
QBluetoothServiceDiscoveryAgent
的实例,并调用
start()
。
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
执行完整的服务发现。
使用
parent
构造一个新的QBluetoothServiceDiscoveryAgent
。搜索通过本地默认的蓝牙适配器执行。- __init__(deviceAdapter[, parent=None])
- Parameters:
deviceAdapter –
QBluetoothAddress
parent –
QObject
为
deviceAdapter
和parent
构造一个新的QBluetoothServiceDiscoveryAgent
。它使用
deviceAdapter
进行服务搜索。如果deviceAdapter
是默认构造的,生成的QBluetoothServiceDiscoveryAgent
对象将使用本地默认的蓝牙适配器。如果指定的
deviceAdapter
不是本地适配器,error()
将被设置为InvalidBluetoothAdapterError
。因此,建议在使用此构造函数后立即测试错误标志。注意
在WinRT上,传递的适配器地址将被忽略。
注意
在Android上传递任何
deviceAdapter
地址是没有意义的,因为Android 6.0或更高版本不再发布本地蓝牙地址。因此,传递的适配器地址永远无法与本地适配器地址匹配。因此,随后的调用start()
将始终触发InvalidBluetoothAdapterError
。另请参阅
- canceled()¶
当通过调用
stop()
取消服务发现时,会触发此信号。- clear()¶
清除之前服务发现的结果并重置
uuidFilter()
。此函数在进行中的服务发现期间不执行任何操作(参见isActive()
)。另请参阅
- discoveredServices()¶
- Return type:
返回所有已发现服务的列表。
此服务列表累积了从多次调用
start()
中发现的新服务。除非调用clear()
,否则列表的大小不会减少。这意味着如果远程蓝牙设备在两次连续调用start()
之间超出范围,列表可能包含过时的条目。返回上次发生的错误类型。如果服务发现是针对单个
remoteAddress()
进行的,它将返回尝试在该设备上发现服务时发生的错误。如果未设置remoteAddress()
并且通过扫描发现设备,则在单个设备上进行服务发现时的错误不会被保存,也不会发出信号。在这种情况下,错误是相当正常的,因为某些设备可能不会响应发现或可能不再在范围内。此类错误被抑制。如果没有返回服务,可以假定无法发现任何服务。重新启动发现时,任何可能的先前错误都会被清除。
当发生
error
时,会发出此信号。error
参数描述了发生的错误。- errorString()¶
- Return type:
字符串
返回服务发现期间发生的最后一个错误的人类可读描述。
另请参阅
- finished()¶
当蓝牙服务发现完成时,会发出此信号。
与
finished()
信号不同,即使在服务发现过程中发生错误,此信号也会被发出。因此,建议检查errorOccurred()
信号以评估服务发现是否成功。- isActive()¶
- Return type:
布尔
如果服务发现当前处于活动状态,则返回
true
;否则返回false
。可以通过调用stop()
来停止活动的发现。- remoteAddress()¶
- Return type:
返回远程设备地址。如果未调用
setRemoteAddress()
,该函数将返回一个默认构造的QBluetoothAddress
。另请参阅
- serviceDiscovered(info)¶
- Parameters:
当发现由
info
描述的蓝牙服务时,会发出此信号。- setRemoteAddress(address)¶
- Parameters:
地址 –
QBluetoothAddress
- Return type:
布尔
将远程设备地址设置为
address
。如果address
是默认构造的,服务将在所有可联系的蓝牙设备上被发现。只有在没有进行服务发现时才能设置新的远程地址;否则此函数返回false。在某些平台上,服务发现可能会导致配对请求。因此,不建议在所有设备上进行服务发现。此函数可用于将服务发现限制在特定设备上。
另请参阅
- setUuidFilter(uuid)¶
- Parameters:
uuid –
QBluetoothUuid
这是一个重载的成员函数,为了方便提供。
将UUID过滤器设置为包含单个元素
uuid
的列表。匹配适用于服务的ServiceId
和ServiceClassIds
属性。另请参阅
- setUuidFilter(uuids)
- Parameters:
uuids – QBluetoothUuid 的列表
将UUID过滤器设置为
uuids
。只有与uuids
中的UUID匹配的服务才会被返回。匹配适用于服务的ServiceId
和ServiceClassIds
属性。一个空的UUID列表等同于仅包含
PublicBrowseGroup
的列表。另请参阅
- start([mode=QBluetoothServiceDiscoveryAgent.DiscoveryMode.MinimalDiscovery])¶
- Parameters:
mode –
DiscoveryMode
启动服务发现。
mode
指定要执行的服务发现类型。在某些平台上,设备发现可能会导致配对请求。
另请参阅
- stop()¶
停止服务发现过程。一旦搜索停止,将发出
canceled()
信号。- uuidFilter()¶
- Return type:
返回UUID过滤器。
另请参阅