このページでは

QBluetoothServiceDiscoveryAgent Class

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

ヘッダー: #include <QBluetoothServiceDiscoveryAgent>
CMake: find_package(Qt6 REQUIRED COMPONENTS Bluetooth)
target_link_libraries(mytarget PRIVATE Qt6::Bluetooth)
qmake: QT += bluetooth
継承元: 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 を利用する場合があります。

ターゲットデバイスが従来のデバイスとBluetooth 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では 、渡されたアダプタアドレスは無視されます。

注: Androidでは 、Android 6.0 以降ではローカル Bluetooth アドレスが公開されなくなったため、deviceAdapter アドレスを渡しても意味がありません。その結果、渡されたアダプタアドレスはローカルアダプタアドレスと照合されることはありません。したがって、その後の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() を連続して呼び出す間に、リモートの Bluetooth デバイスが通信範囲外に移動した場合、一覧には古いエントリが含まれる可能性があります。

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

関連項目: clear()。

QBluetoothServiceDiscoveryAgent::Error QBluetoothServiceDiscoveryAgent::error() const

最後に発生したエラーの種類を返します。単一のremoteAddress()に対してサービス検出が行われた場合、そのデバイス上でサービスを検出しようとした際に発生したエラーが返されます。remoteAddress()が設定されておらず、スキャンによってデバイスが検出された場合、個々のデバイスでのサービス検出中に発生したエラーは保存されず、シグナルも発信されません。 この場合、一部のデバイスがディスカバリーに応答しない、あるいは通信範囲外にある可能性があるため、エラーが発生することは比較的よくあることです。このようなエラーは抑制されます。サービスが一切返されない場合は、サービスを検出できなかったものとみなすことができます。

検出を再開すると、以前に発生した可能性のあるエラーはすべてクリアされます。

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

このシグナルは、error が発生したときに発火します。error パラメータは、発生したエラーの詳細を表します。

この関数は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` を含むリストに設定します。この一致判定は、サービスの `ServiceId ` および `ServiceClassIds ` 属性に対して適用されます。

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

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

UUID フィルターをuuids に設定します。uuids に記載された UUID に一致するサービスのみが返されます。一致の判定は、サービスのServiceId およびServiceClassIds 属性に対して行われます。

空の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()も参照してください 。

© 2026 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.