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 Service Discovery Process (SDP)に依存します。接触可能なすべてのBluetoothデバイスが提供するサービスを照会するには、以下の手順が必要です:

  • QBluetoothServiceDiscoveryAgentのインスタンスを作成する、
  • serviceDiscovered() またはfinished() シグナルに接続する、
  • に接続し、start() を呼び出します。
void MyClass::startServiceDiscovery()
{

    // Create a discovery agent and connect to its signals
    QBluetoothServiceDiscoveryAgent *discoveryAgent = new QBluetoothServiceDiscoveryAgent(this);
    connect(discoveryAgent, SIGNAL(serviceDiscovered(QBluetoothServiceInfo)),
            this, SLOT(serviceDiscovered(QBluetoothServiceInfo)));

    // Start a discovery
    discoveryAgent->start();

    //...
}

// In your local slot, read information about the found devices
void MyClass::serviceDiscovered(const QBluetoothServiceInfo &service)
{
    qDebug() << "Found new service:" << service.serviceName()
             << '(' << service.device().address().toString() << ')';
}

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

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

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

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

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

メンバ型ドキュメント

enum QBluetoothServiceDiscoveryAgent::DiscoveryMode

この enum は、サービス検出モードを記述します。

定数説明
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 サービスが検出されたときに発行されます。

注意: 渡されたQBluetoothServiceInfo パラメータには、ターゲットデバイスがSDPを介してサービ スをアドバタイズしている場合、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()も参照してください

©2024 The Qt Company Ltd. 本文書に含まれる文書の著作権は、それぞれの所有者に帰属します。 ここで提供されるドキュメントは、Free Software Foundation が発行したGNU Free Documentation License version 1.3に基づいてライセンスされています。 Qtおよびそれぞれのロゴは、フィンランドおよびその他の国におけるThe Qt Company Ltd.の 商標です。その他すべての商標は、それぞれの所有者に帰属します。