- class QBluetoothServiceDiscoveryAgent#
The
QBluetoothServiceDiscoveryAgent
class enables you to query for Bluetooth services. More…Synopsis#
Methods#
def
__init__()
def
error()
def
errorString()
def
isActive()
def
remoteAddress()
def
setUuidFilter()
def
uuidFilter()
Slots#
Signals#
def
canceled()
def
errorOccurred()
def
finished()
Note
This documentation may contain snippets that were automatically translated from C++ to Python. We always welcome contributions to the snippet translation. If you see an issue with the translation, you can also let us know by creating a ticket on https:/bugreports.qt.io/projects/PYSIDE
Detailed Description#
Warning
This section contains snippets that were automatically translated from C++ to Python and may contain errors.
The discovery process relies on the Bluetooth Service Discovery Process (SDP). The following steps are required to query the services provided by all contactable Bluetooth devices:
create an instance of
QBluetoothServiceDiscoveryAgent
,connect to either the
serviceDiscovered()
orfinished()
signals,and call
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() << ')'
By default a minimal service discovery is performed. In this mode, the returned
QBluetoothServiceInfo
objects are guaranteed to contain only device and service UUID information. Depending on platform and device capabilities, other service information may also be available. The minimal service discovery mode relies on cached SDP data of the platform. Therefore it is possible that this discovery does not find a device although it is physically available. In such cases a full discovery must be performed to force an update of the platform cache. However for most use cases a minimal discovery is adequate as it is much quicker and other classes which require up-to-date information such asconnectToService()
will perform additional discovery if required. If the full service information is required, passFullDiscovery
as the discoveryMode parameter tostart()
.This class may internally utilize
QBluetoothDeviceDiscoveryAgent
to find unknown devices.The service discovery may find Bluetooth Low Energy services too if the target device is a combination of a classic and Low Energy device. Those devices are required to advertise their Low Energy services via SDP. If the target device only supports Bluetooth Low Energy services, it is likely to not advertise them via SDP. The
QLowEnergyController
class should be utilized to perform the service discovery on Low Energy devices.On iOS, this class cannot be used because the platform does not expose an API which may permit access to
QBluetoothServiceDiscoveryAgent
related features.- class Error#
This enum describes errors that can occur during service discovery.
Constant
Description
QBluetoothServiceDiscoveryAgent.NoError
No error has occurred.
QBluetoothServiceDiscoveryAgent.PoweredOffError
The Bluetooth adaptor is powered off, power it on before doing discovery.
QBluetoothServiceDiscoveryAgent.InputOutputError
Writing or reading from the device resulted in an error.
QBluetoothServiceDiscoveryAgent.InvalidBluetoothAdapterError
The passed local adapter address does not match the physical adapter address of any local Bluetooth device.
QBluetoothServiceDiscoveryAgent.MissingPermissionsError
The operating system requests permissions which were not granted by the user.
QBluetoothServiceDiscoveryAgent.UnknownError
An unknown error has occurred.
- class DiscoveryMode#
This enum describes the service discovery mode.
Constant
Description
QBluetoothServiceDiscoveryAgent.MinimalDiscovery
Performs a minimal service discovery. The
QBluetoothServiceInfo
objects returned may be incomplete and are only guaranteed to contain device and service UUID information. Since a minimal discovery relies on cached SDP data it may not find a physically existing device until aFullDiscovery
is performed.QBluetoothServiceDiscoveryAgent.FullDiscovery
Performs a full service discovery.
- __init__(deviceAdapter[, parent=None])#
- Parameters:
deviceAdapter –
QBluetoothAddress
parent –
QObject
Constructs a new
QBluetoothServiceDiscoveryAgent
fordeviceAdapter
and withparent
.It uses
deviceAdapter
for the service search. IfdeviceAdapter
is default constructed the resultingQBluetoothServiceDiscoveryAgent
object will use the local default Bluetooth adapter.If a
deviceAdapter
is specified that is not a local adaptererror()
will be set toInvalidBluetoothAdapterError
. Therefore it is recommended to test the error flag immediately after using this constructor.Note
On WinRT the passed adapter address will be ignored.
Note
On Android passing any
deviceAdapter
address is meaningless as Android 6.0 or later does not publish the local Bluetooth address anymore. Subsequently, the passed adapter address can never be matched against the local adapter address. Therefore the subsequent call tostart()
will always triggerInvalidBluetoothAdapterError
.See also
- __init__([parent=None])
- Parameters:
parent –
QObject
Constructs a new
QBluetoothServiceDiscoveryAgent
withparent
. The search is performed via the local default Bluetooth adapter.- canceled()#
This signal is triggered when the service discovery was canceled via a call to
stop()
.- clear()#
Clears the results of previous service discoveries and resets
uuidFilter()
. This function does nothing during an ongoing service discovery (seeisActive()
).See also
- discoveredServices()#
- Return type:
.list of QBluetoothServiceInfo
Returns the list of all discovered services.
This list of services accumulates newly discovered services from multiple calls to
start()
. Unlessclear()
is called the list cannot decrease in size. This implies that if a remote Bluetooth device moves out of range in between two subsequent calls tostart()
the list may contain stale entries.Note
The list of services should always be cleared before the discovery mode is changed.
See also
Returns the type of error that last occurred. If the service discovery is done for a single
remoteAddress()
it will return errors that occurred while trying to discover services on that device. If theremoteAddress()
is not set and devices are discovered by a scan, errors during service discovery on individual devices are not saved and no signals are emitted. In this case, errors are fairly normal as some devices may not respond to discovery or may no longer be in range. Such errors are suppressed. If no services are returned, it can be assumed no services could be discovered.Any possible previous errors are cleared upon restarting the discovery.
This signal is emitted when an
error
occurs. Theerror
parameter describes the error that occurred.- errorString()#
- Return type:
str
Returns a human-readable description of the last error that occurred during the service discovery.
See also
- finished()#
This signal is emitted when the Bluetooth service discovery completes.
Unlike the
finished()
signal this signal will even be emitted when an error occurred during the service discovery. Therefore it is recommended to check theerrorOccurred()
signal to evaluate the success of the service discovery discovery.- isActive()#
- Return type:
bool
Returns
true
if the service discovery is currently active; otherwise returnsfalse
. An active discovery can be stopped by callingstop()
.- remoteAddress()#
- Return type:
Returns the remote device address. If
setRemoteAddress()
is not called, the function will return a default constructedQBluetoothAddress
.See also
- serviceDiscovered(info)#
- Parameters:
info –
QBluetoothServiceInfo
This signal is emitted when the Bluetooth service described by
info
is discovered.Note
The passed
QBluetoothServiceInfo
parameter may contain a Bluetooth Low Energy service if the target device advertises the service via SDP. This is required from device which support both, classic Bluetooth (BaseRate) and Low Energy services.See also
- setRemoteAddress(address)#
- Parameters:
address –
QBluetoothAddress
- Return type:
bool
Sets the remote device address to
address
. Ifaddress
is default constructed, services will be discovered on all contactable Bluetooth devices. A new remote address can only be set while there is no service discovery in progress; otherwise this function returns false.On some platforms the service discovery might lead to pairing requests. Therefore it is not recommended to do service discoveries on all devices. This function can be used to restrict the service discovery to a particular device.
See also
- setUuidFilter(uuid)#
- Parameters:
uuid –
QBluetoothUuid
This is an overloaded member function, provided for convenience.
Sets the UUID filter to a list containing the single element
uuid
. The matching applies to the service’sServiceId
andServiceClassIds
attributes.See also
- setUuidFilter(uuids)
- Parameters:
uuids – .list of QBluetoothUuid
Sets the UUID filter to
uuids
. Only services matching the UUIDs inuuids
will be returned. The matching applies to the service’sServiceId
andServiceClassIds
attributes.An empty UUID list is equivalent to a list containing only
PublicBrowseGroup
.See also
- start([mode=QBluetoothServiceDiscoveryAgent.DiscoveryMode.MinimalDiscovery])#
- Parameters:
mode –
DiscoveryMode
Starts service discovery.
mode
specifies the type of service discovery to perform.On some platforms, device discovery may lead to pairing requests.
See also
- stop()#
Stops the service discovery process. The
canceled()
signal will be emitted once the search has stopped.- uuidFilter()#
- Return type:
.list of QBluetoothUuid
Returns the UUID filter.
See also