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