QBluetoothServiceDiscoveryAgent Class

QBluetooth서비스디스커버리에이전트 클래스를 사용하면 블루투스 서비스를 쿼리할 수 있습니다. 더 보기...

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)

상세 설명

검색 프로세스는 블루투스 서비스 검색 프로세스(SDP)에 의존합니다. 연결 가능한 모든 Bluetooth 장치에서 제공하는 서비스를 쿼리하려면 다음 단계가 필요합니다:

  • QBluetoothServiceDiscoveryAgent의 인스턴스를 생성합니다,
  • serviceDiscovered() 또는 finished() 신호에 연결합니다,
  • start()를 호출합니다.
void MyClass::startServiceDiscovery() { // 검색 에이전트를 생성하고 해당 신호에 연결합니다.   QBluetoothServiceDiscoveryAgent *discoveryAgent = new QBluetoothServiceDiscoveryAgent(this); connect(discoveryAgent, SIGNAL(serviceDiscovered(QBluetoothServiceInfo)), this, SLOT(serviceDiscovered(QBluetoothServiceInfo))); // 디스커버리 시작 discoveryAgent->start(); //...}// 로컬 슬롯에서 발견된 디바이스에 대한 정보를 읽습니다void MyClass::serviceDiscovered(const QBluetoothServiceInfo &service){
    qDebug() << "Found new service:" << service.serviceName()
            << '('<< service.device().address().toString()<< ')'; }

기본적으로 최소한의 서비스 검색이 수행됩니다. 이 모드에서 반환된 QBluetoothServiceInfo 객체는 디바이스 및 서비스 UUID 정보만 포함하도록 보장됩니다. 플랫폼 및 디바이스 기능에 따라 다른 서비스 정보도 사용할 수 있습니다. 최소 서비스 검색 모드는 플랫폼의 캐시된 SDP 데이터에 의존합니다. 따라서 물리적으로 사용 가능한 디바이스임에도 불구하고 이 검색이 디바이스를 찾지 못할 수 있습니다. 이러한 경우 플랫폼 캐시를 강제로 업데이트하려면 전체 검색을 수행해야 합니다. 그러나 대부분의 사용 사례에서는 최소 검색이 훨씬 빠르고 QBluetoothSocket::connectToService()와 같이 최신 정보가 필요한 다른 클래스는 필요한 경우 추가 검색을 수행하므로 최소 검색으로도 충분합니다. 전체 서비스 정보가 필요한 경우 start()에 discoveryMode 매개 변수로 FullDiscovery 를 전달하세요.

이 클래스는 내부적으로 QBluetoothDeviceDiscoveryAgent 을 사용하여 알 수 없는 장치를 찾을 수 있습니다.

대상 장치가 일반 장치와 저에너지 장치의 조합인 경우 서비스 검색은 Bluetooth 저에너지 서비스도 찾을 수 있습니다. 이러한 장치는 SDP를 통해 저에너지 서비스를 광고해야 합니다. 대상 디바이스가 블루투스 저에너지 서비스만 지원하는 경우 SDP를 통해 해당 서비스를 광고하지 않을 가능성이 높습니다. 저에너지 장치에서 서비스 검색을 수행하려면 QLowEnergyController 클래스를 활용해야 합니다.

iOS에서는 플랫폼이 QBluetoothServiceDiscoveryAgent 관련 기능에 액세스할 수 있는 API를 노출하지 않기 때문에 이 클래스를 사용할 수 없습니다.

QBluetoothDeviceDiscoveryAgentQLowEnergyController참조하세요 .

멤버 유형 문서

enum QBluetoothServiceDiscoveryAgent::DiscoveryMode

이 열거형은 서비스 검색 모드를 설명합니다.

Constant설명
QBluetoothServiceDiscoveryAgent::MinimalDiscovery0최소한의 서비스 검색을 수행합니다. 반환되는 QBluetoothServiceInfo 개체는 불완전할 수 있으며 장치 및 서비스 UUID 정보만 포함하도록 보장됩니다. 최소 검색은 캐시된 SDP 데이터에 의존하므로 FullDiscovery 이 수행될 때까지 물리적으로 존재하는 장치를 찾지 못할 수 있습니다.
QBluetoothServiceDiscoveryAgent::FullDiscovery1전체 서비스 검색을 수행합니다.

enum QBluetoothServiceDiscoveryAgent::Error

이 열거형은 서비스 검색 중에 발생할 수 있는 오류를 설명합니다.

Constant설명
QBluetoothServiceDiscoveryAgent::NoErrorQBluetoothDeviceDiscoveryAgent::NoError오류가 발생하지 않았습니다.
QBluetoothServiceDiscoveryAgent::PoweredOffErrorQBluetoothDeviceDiscoveryAgent::PoweredOffError블루투스 어댑터의 전원이 꺼져 있으므로 검색을 수행하기 전에 전원을 켜세요.
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를 구축합니다. 검색은 로컬 기본 블루투스 어댑터를 통해 수행됩니다.

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

deviceAdapterparent 에 대한 새로운 QBluetoothServiceDiscoveryAgent를 구축합니다.

서비스 검색에는 deviceAdapter 을 사용합니다. deviceAdapter 이 기본으로 생성된 경우 결과 QBluetoothServiceDiscoveryAgent 객체는 로컬 기본 블루투스 어댑터를 사용합니다.

로컬 어댑터가 아닌 deviceAdapter 가 지정되면 error()는 InvalidBluetoothAdapterError 로 설정됩니다. 따라서 이 생성자를 사용한 직후에 오류 플래그를 테스트하는 것이 좋습니다.

참고: WinRT에서는 전달된 어댑터 주소가 무시됩니다.

참고: Android 6.0 이상에서는 로컬 블루투스 주소를 더 이상 게시하지 않으므로 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 ()를 호출하지 않는 한 목록의 크기는 줄어들지 않습니다. 즉, 원격 Bluetooth 디바이스가 start()에 대한 두 번의 후속 호출 사이에 범위를 벗어나는 경우 목록에 오래된 항목이 포함될 수 있습니다.

참고: 검색 모드를 변경하기 전에 항상 서비스 목록을 지워야 합니다.

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()

이 신호는 블루투스 서비스 검색이 완료되면 전송됩니다.

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 에서 설명하는 블루투스 서비스가 발견될 때 전송됩니다.

참고: 전달된 QBluetoothServiceInfo 매개변수에는 대상 디바이스가 SDP를 통해 서비스를 광고하는 경우 Bluetooth 저에너지 서비스가 포함될 수 있습니다. 이는 클래식 블루투스(BaseRate) 및 저에너지 서비스를 모두 지원하는 장치에서 필요합니다.

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.