QBluetoothServiceDiscoveryAgent Class
QBluetoothServiceDiscoveryAgent 클래스를 사용하면 블루투스 서비스를 조회할 수 있습니다. 더 보기...
| 헤더: | #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) |
상세 설명
탐색 프로세스는 블루투스 서비스 탐색 프로세스(SDP)를 기반으로 합니다. 연결 가능한 모든 블루투스 기기가 제공하는 서비스를 조회하려면 다음 단계가 필요합니다:
- 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 를 사용할 수 있습니다.
대상 기기가 기존 기기와 저에너지 기기가 혼합된 경우, 서비스 탐색을 통해 블루투스 저에너지 서비스도 발견될 수 있습니다. 이러한 장치는 SDP를 통해 저에너지 서비스를 알릴 의무가 있습니다. 대상 장치가 블루투스 저에너지 서비스만 지원하는 경우, SDP를 통해 해당 서비스를 알리지 않을 가능성이 높습니다. 저에너지 장치에서 서비스 검색을 수행하려면 QLowEnergyController 클래스를 사용해야 합니다.
iOS에서는 플랫폼이 QBluetoothServiceDiscoveryAgent 관련 기능에 대한 액세스를 허용할 수 있는 API를 제공하지 않기 때문에 이 클래스를 사용할 수 없습니다.
QBluetoothDeviceDiscoveryAgent 및 QLowEnergyController도 참조하십시오 .
멤버 유형 문서
enum QBluetoothServiceDiscoveryAgent::DiscoveryMode
이 열거형은 서비스 검색 모드를 나타냅니다.
| 상수 | 값 | 설명 |
|---|---|---|
QBluetoothServiceDiscoveryAgent::MinimalDiscovery | 0 | 최소 서비스 검색을 수행합니다. 반환되는 ` QBluetoothServiceInfo ` 객체는 불완전할 수 있으며, 장치 및 서비스 UUID 정보만 포함되는 것이 보장됩니다. 최소 검색은 캐시된 SDP 데이터에 의존하므로, ` FullDiscovery `이 수행될 때까지 물리적으로 존재하는 장치를 찾지 못할 수도 있습니다. |
QBluetoothServiceDiscoveryAgent::FullDiscovery | 1 | 전체 서비스 검색을 수행합니다. |
enum QBluetoothServiceDiscoveryAgent::Error
이 열거형은 서비스 검색 과정에서 발생할 수 있는 오류를 설명합니다.
| 상수 | 값 | 설명 |
|---|---|---|
QBluetoothServiceDiscoveryAgent::NoError | QBluetoothDeviceDiscoveryAgent::NoError | 오류가 발생하지 않았습니다. |
QBluetoothServiceDiscoveryAgent::PoweredOffError | QBluetoothDeviceDiscoveryAgent::PoweredOffError | 블루투스 어댑터의 전원이 꺼져 있습니다. 검색을 수행하기 전에 전원을 켜십시오. |
QBluetoothServiceDiscoveryAgent::InputOutputError | QBluetoothDeviceDiscoveryAgent::InputOutputError | 장치에 대한 쓰기 또는 읽기 작업 중 오류가 발생했습니다. |
QBluetoothServiceDiscoveryAgent::InvalidBluetoothAdapterError (since Qt 5.3) | QBluetoothDeviceDiscoveryAgent::InvalidBluetoothAdapterError | 전달된 로컬 어댑터 주소가 어떤 로컬 블루투스 장치의 물리적 어댑터 주소와도 일치하지 않습니다. |
QBluetoothServiceDiscoveryAgent::MissingPermissionsError (since Qt 6.4) | QBluetoothDeviceDiscoveryAgent::MissingPermissionsError | 운영 체제가 사용자에게 허용되지 않은 권한을 요청했습니다. |
QBluetoothServiceDiscoveryAgent::UnknownError | QBluetoothDeviceDiscoveryAgent::UnknownError | 알 수 없는 오류가 발생했습니다. |
멤버 함수 설명서
[explicit] QBluetoothServiceDiscoveryAgent::QBluetoothServiceDiscoveryAgent(QObject *parent = nullptr)
parent 를 사용하여 새로운 QBluetoothServiceDiscoveryAgent를 생성합니다. 검색은 로컬 기본 블루투스 어댑터를 통해 수행됩니다.
[explicit] QBluetoothServiceDiscoveryAgent::QBluetoothServiceDiscoveryAgent(const QBluetoothAddress &deviceAdapter, QObject *parent = nullptr)
deviceAdapter 에 대해 parent 를 사용하여 새로운 QBluetoothServiceDiscoveryAgent를 생성합니다.
서비스 검색에는 deviceAdapter 를 사용합니다. deviceAdapter 가 기본 생성자로 생성된 경우, 결과로 반환되는 QBluetoothServiceDiscoveryAgent 객체는 로컬 기본 Bluetooth 어댑터를 사용합니다.
로컬 어댑터가 아닌 deviceAdapter 가 지정된 경우, error()은 InvalidBluetoothAdapterError 로 설정됩니다. 따라서 이 생성자를 사용한 직후 오류 플래그를 확인하는 것이 권장됩니다.
참고: WinRT에서는 전달된 어댑터 주소가 무시됩니다.
참고: Android에서는 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() 함수가 호출되지 않는 한 목록의 크기는 줄어들 수 없습니다. 즉, 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 에 설명된 블루투스 서비스가 감지될 때 발생합니다.
참고: 대상 기기가 SDP를 통해 해당 서비스를 알리는 경우, 전달된 QBluetoothServiceInfo 매개변수에 블루투스 저에너지(Bluetooth Low Energy) 서비스가 포함될 수 있습니다. 이는 클래식 블루투스(BaseRate)와 저에너지 서비스를 모두 지원하는 기기에서 필수 사항입니다.
QBluetoothDeviceInfo::coreConfigurations()도 참조하십시오 .
bool QBluetoothServiceDiscoveryAgent::setRemoteAddress(const QBluetoothAddress &address)
원격 장치 주소를 address 로 설정합니다. address 가 기본 생성된 경우, 연결 가능한 모든 블루투스 장치에서 서비스가 검색됩니다. 새로운 원격 주소는 서비스 검색이 진행 중이지 않을 때만 설정할 수 있으며, 그렇지 않은 경우 이 함수는 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.