QBluetoothServiceDiscoveryAgent Class

QBluetoothServiceDiscoveryAgent クラスを使用すると、Bluetooth サービスを照会できます。詳細...

Header: #include <QBluetoothServiceDiscoveryAgent>
qmake: QT += bluetooth
Inherits: QObject

パブリックタイプ

enum DiscoveryMode { MinimalDiscovery, FullDiscovery }
enum Error { NoError, PoweredOffError, InputOutputError, InvalidBluetoothAdapterError, MissingPermissionsError, UnknownError }

パブリック関数

QBluetoothServiceDiscoveryAgent(QObject *parent = nullptr)
QBluetoothServiceDiscoveryAgent(const QBluetoothAddress &deviceAdapter, QObject *parent = nullptr)
virtual ~QBluetoothServiceDiscoveryAgent()
QList<QBluetoothServiceInfo> discoveredServices() const
QBluetoothServiceDiscoveryAgent::Error error() const
QString errorString() const
bool isActive() const
QBluetoothAddress remoteAddress() const
bool setRemoteAddress(const QBluetoothAddress &address)
void setUuidFilter(const QBluetoothUuid &uuid)
void setUuidFilter(const QList<QBluetoothUuid> &uuids)
QList<QBluetoothUuid> uuidFilter() const

パブリックスロット

void clear()
void start(QBluetoothServiceDiscoveryAgent::DiscoveryMode mode = MinimalDiscovery)
void stop()

シグナル

void canceled()
(since 6.2) void errorOccurred(QBluetoothServiceDiscoveryAgent::Error error)
void finished()
void serviceDiscovered(const QBluetoothServiceInfo &info)

詳細説明

検出プロセスはBluetoothサービス検出プロセス(SDP)に依存します。接触可能なすべてのBluetoothデバイスが提供するサービスを照会するには、以下の手順が必要です:

  • QBluetoothServiceDiscoveryAgent のインスタンスを作成します、
  • serviceDiscovered() またはfinished() シグナルに接続する、
  • start() を呼び出す。
voidMyClass::startServiceDiscovery() {// ディスカバリー・エージェントを作成し、そのシグナルに接続しますQBluetoothServiceDiscoveryAgent*discoveryAgent = newQBluetoothServiceDiscoveryAgent(this); connect(discoveryAgent,SIGNAL(serviceDiscovered(QBluetoothServiceInfo)), this,SLOT(serviceDiscovered(QBluetoothServiceInfo));// discoveryAgent->start();//...}// ローカルスロットで、見つかったデバイスに関する情報を読み込むvoidMyClass::serviceDiscovered(constQBluetoothServiceInfo&service){
    qDebug() << "Found new service:" << service.serviceName()
            <<('<<service.device().address().toString()<< ')'; }

デフォルトでは、最小限のサービス・ディスカバリーが実行される。このモードでは、返されるQBluetoothServiceInfo オブジェクトには、デバイスとサービスの UUID 情報のみが含まれることが保証されます。プラットフォームとデバイスの能力によっては、他のサービス情報も利用できるかもしれない。最小サービス検出モードは、プラットフォームのキャッシュされたSDPデー タに依存する。したがって、物理的に利用可能であるにもかかわらず、この検出でデバイス が見つからない可能性がある。このような場合、完全な検出を実行して、プラッ トフォームのキャッシュを強制的に更新する必要がある。しかし、ほとんどの使用例では、最小限の検出で十分である。これは、はるかに速いからであり、QBluetoothSocket::connectToService ()のような最新情報を必要とする他のクラスは、必要に応じて追加の検出を実行する。完全なサービス情報が必要な場合は、start() に discoveryMode パラメータとしてFullDiscovery を渡す。

このクラスは、未知のデバイスを見つけるために、内部的にQBluetoothDeviceDiscoveryAgent

ターゲットデバイスがクラシックデバイスとLow Energyデバイスの組み合わせである場合、サービス検出はBluetooth Low Energyサービスも検出する可能性があります。これらのデバイスは、SDPを介してLow Energyサービスをアドバタイズする必要がある。ターゲットデバイ スがBluetooth Low Energyサービスのみをサポートしている場合、SDPを介 してサービスをアドバタイズしない可能性が高い。Low Energyデバイスのサービス検出を実行するには、QLowEnergyController クラスを使用する必要がある。

iOSの場合、プラットフォームがQBluetoothServiceDiscoveryAgent関連の機能へのアクセスを許可するAPIを公開していないため、このクラスを使用できません。

QBluetoothDeviceDiscoveryAgent およびQLowEnergyControllerも参照して ください。

メンバ型ドキュメント

enum QBluetoothServiceDiscoveryAgent::DiscoveryMode

この列挙型はサービス発見モードを記述する。

定数説明
QBluetoothServiceDiscoveryAgent::MinimalDiscovery0最小限のサービス発見を実行する。返されるQBluetoothServiceInfo オブジェクトは不完全である可能性があり、デバイスとサービスのUUID情報を 含むことのみが保証される。最小限の検出はキャッシュされたSDPデータに依存するため、FullDiscovery が実行されるまで、物理的に存在するデバイスが見つからない可能性がある。
QBluetoothServiceDiscoveryAgent::FullDiscovery1完全なサービス検出を実行する。

enum QBluetoothServiceDiscoveryAgent::Error

この列挙型は、サービス検出中に発生する可能性のあるエラーを記述します。

定数説明
QBluetoothServiceDiscoveryAgent::NoErrorQBluetoothDeviceDiscoveryAgent::NoErrorエラーは発生していません。
QBluetoothServiceDiscoveryAgent::PoweredOffErrorQBluetoothDeviceDiscoveryAgent::PoweredOffErrorBluetoothアダプタの電源がオフになっています。
QBluetoothServiceDiscoveryAgent::InputOutputErrorQBluetoothDeviceDiscoveryAgent::InputOutputErrorデバイスからの書き込みまたは読み込みでエラーが発生しました。
QBluetoothServiceDiscoveryAgent::InvalidBluetoothAdapterError (since Qt 5.3)QBluetoothDeviceDiscoveryAgent::InvalidBluetoothAdapterError渡されたローカル・アダプタ・アドレスが、ローカル Bluetooth デバイスの物理アダプタ・アドレスと一致しません。
QBluetoothServiceDiscoveryAgent::MissingPermissionsError (since Qt 6.4)QBluetoothDeviceDiscoveryAgent::MissingPermissionsErrorオペレーティングシステムが、ユーザーによって許可されていないパーミッションを要求しています。
QBluetoothServiceDiscoveryAgent::UnknownErrorQBluetoothDeviceDiscoveryAgent::UnknownError不明なエラーが発生しました。

メンバー関数ドキュメント

[explicit] QBluetoothServiceDiscoveryAgent::QBluetoothServiceDiscoveryAgent(QObject *parent = nullptr)

parent を持つ新しい QBluetoothServiceDiscoveryAgent を構築します。検索は、ローカルのデフォルト Bluetooth アダプタを介して実行されます。

[explicit] QBluetoothServiceDiscoveryAgent::QBluetoothServiceDiscoveryAgent(const QBluetoothAddress &deviceAdapter, QObject *parent = nullptr)

deviceAdapter およびparent 用の新しい QBluetoothServiceDiscoveryAgent を構築します。

サービス検索にはdeviceAdapter を使用します。deviceAdapter がデフォルトで構築された場合、結果の QBluetoothServiceDiscoveryAgent オブジェクトは、ローカルのデフォルト Bluetooth アダプタを使用します。

ローカルアダプタではないdeviceAdapter が指定された場合、error() はInvalidBluetoothAdapterError に設定されます。 したがって、このコンストラクタを使用した直後にエラーフラグをテストすることをお勧めします。

注意: WinRT では、渡されたアダプタ・アドレスは無視されます。

deviceAdapter Android 6.0 以降では、ローカルの Bluetooth アドレスが公開されなくなったためですそのため、渡されたアダプタ・アドレスをローカル・アダプタ・アドレスと照合することはできません。そのため、start() を呼び出すと、常にInvalidBluetoothAdapterError がトリガされます。

error()も参照してください

[virtual noexcept] QBluetoothServiceDiscoveryAgent::~QBluetoothServiceDiscoveryAgent()

のデストラクタ。QBluetoothServiceDiscoveryAgent

[signal] void QBluetoothServiceDiscoveryAgent::canceled()

このシグナルは、stop ()の呼び出しによってサービス発見がキャンセルされたときにトリガーされる。

[slot] void QBluetoothServiceDiscoveryAgent::clear()

以前のサービス発見の結果をクリアし、uuidFilter()をリセットする。この関数は、進行中のサービス発見中(isActive()を参照)には何もしない。

discoveredServices()も参照

QList<QBluetoothServiceInfo> QBluetoothServiceDiscoveryAgent::discoveredServices() const

発見されたすべてのサービスのリストを返す。

このサービス・リストは、start ()を複数回呼び出すことで、新たに検出されたサービスを蓄積したものである。clear() が呼び出されない限り、リストのサイズが小さくなることはない。つまり、start() を 2 回呼び出す間にリモートの Bluetooth 機器が圏外に移動した場合、リストに古いエントリが含まれる可能性があります。

注意: サービスリストは、検出モードを変更する前に常にクリアする必要があります。

clear()も参照の こと。

QBluetoothServiceDiscoveryAgent::Error QBluetoothServiceDiscoveryAgent::error() const

最後に発生したエラーのタイプを返す。サービス検出が単一のremoteAddress() に対して行われた場合、そのデバイスのサービスを検出しようとして発生したエラーが返される。remoteAddress() が設定されず、スキャンによってデバイスが発見された場合、個々のデバイスのサービス発見中のエラーは保存されず、シグナルは発せられない。この場合、一部のデバイスが検出に応答しなかったり、検出範囲外になったりすることがあるため、エラーはごく正常なものである。このようなエラーは抑制される。サービスが返されない場合、サービスは発見されなかったと考えることができる。

可能性のある以前のエラーは、発見を再開するときに消去される。

[signal, since 6.2] void QBluetoothServiceDiscoveryAgent::errorOccurred(QBluetoothServiceDiscoveryAgent::Error error)

このシグナルはerrorerror パラメータには、発生したエラーが記述されています。

この関数は Qt 6.2 で導入されました。

QString QBluetoothServiceDiscoveryAgent::errorString() const

サービス検出中に発生した最後のエラーについて、人間が読める説明を返します。

error() およびerrorOccurred()も参照ください

[signal] void QBluetoothServiceDiscoveryAgent::finished()

このシグナルは、Bluetoothのサービス検出が完了したときに発行されます。

QBluetoothDeviceDiscoveryAgent::finished() シグナルとは異なり、このシグナルはサービス検出中にエラーが発生した場合にも発せられます。そのため、サービス・ディスカバリーの成功を評価するには、errorOccurred() シグナルをチェックすることをお勧めします。

bool QBluetoothServiceDiscoveryAgent::isActive() const

サービス探索が現在アクティブな場合はtrue を返し、そうでない場合はfalse を返す。アクティブなディスカバリーは、stop()をコールすることで停止できる。

QBluetoothAddress QBluetoothServiceDiscoveryAgent::remoteAddress() const

リモート・デバイス・アドレスを返す。setRemoteAddress() が呼び出されなかった場合、この関数はデフォルトで構築されたQBluetoothAddress を返す。

setRemoteAddress()も参照

[signal] void QBluetoothServiceDiscoveryAgent::serviceDiscovered(const QBluetoothServiceInfo &info)

このシグナルは、info に記述されているBluetoothサービスが検出されたときに発行される。

注意: ターゲットデバイスがSDP経由でサービスをアドバタイズする場合、渡されたQBluetoothServiceInfo パラメータにBluetooth Low Energyサービスが含まれることがある。これは、クラシックBluetooth (BaseRate)サービスとLow Energyサービスの両方をサポートするデバイスで必要です。

QBluetoothDeviceInfo::coreConfigurations()も参照してください

bool QBluetoothServiceDiscoveryAgent::setRemoteAddress(const QBluetoothAddress &address)

リモートデバイスアドレスをaddress に設定します。address がデフォルトで構築されている場合、接触可能なすべての Bluetooth デバイスでサービスが検出されます。新しいリモートアドレスは、サービス検出が進行中でない場合にのみ設定できます。

そうでない場合、この関数はfalseを返します。プラットフォームによっては、サービス検出がペアリング要求につながる場合があります。そのため、すべてのデバイスでサービス検出を行うことは推奨されません。この関数を使用すると、サービス検出を特定のデバイスに制限することができます。

remoteAddress()も参照のこと

void QBluetoothServiceDiscoveryAgent::setUuidFilter(const QBluetoothUuid &uuid)

これはオーバーロードされたメンバ関数で、便宜上提供されている。

単一の要素uuid を含むリストにUUIDフィルターを設定します。マッチングはサービスのServiceIdServiceClassIds 属性に適用されます。

uuidFilter()も参照してください

void QBluetoothServiceDiscoveryAgent::setUuidFilter(const QList<QBluetoothUuid> &uuids)

UUID フィルタをuuids に設定します。uuids の UUID に一致するサービスだけが返されます。マッチングはサービスのServiceIdServiceClassIds 属性に適用されます。

空のUUIDリストは、QBluetoothUuid::ServiceClassUuid::PublicBrowseGroup のみを含むリストと同じです。

uuidFilter()も参照

[slot] void QBluetoothServiceDiscoveryAgent::start(QBluetoothServiceDiscoveryAgent::DiscoveryMode mode = MinimalDiscovery)

mode 実行するサービス発見のタイプを指定する。

プラットフォームによっては、デバイス発見がペアリング要求につながるかもしれない。

DiscoveryModeも参照のこと

[slot] void QBluetoothServiceDiscoveryAgent::stop()

サービス検索プロセスを停止します。検索が停止すると、canceled() シグナルが発行されます。

QList<QBluetoothUuid> QBluetoothServiceDiscoveryAgent::uuidFilter() const

UUID フィルタを返します。

setUuidFilter()も参照ください

© 2025 The Qt Company Ltd. Documentation contributions included herein are the copyrights of their respective owners. The documentation provided herein is licensed under the terms of the GNU Free Documentation License version 1.3 as published by the Free Software Foundation. Qt and respective logos are trademarks of The Qt Company Ltd. in Finland and/or other countries worldwide. All other trademarks are property of their respective owners.