Qt NFC 개요
Qt NFC API의 일반적인 사용 사례는 다음과 같습니다:
- NFC 태그 감지.
- NDEF 메시지 읽기 및 쓰기.
- NDEF 메시지 핸들러 등록.
- 파일 및 메시지 공유.
다음 섹션에서는 위의 사용 사례에 Qt NFC C++ 클래스 및 QML 유형을 사용하는 방법을 설명합니다.
참고: Android에서 새로운 NFC 태그 감지는 포그라운드 애플리케이션에서만 작동합니다. Android 서비스는 Android 측의 API 제한으로 인해 이를 지원하지 않습니다. 서비스에서 태그를 사용하는 유일한 방법은 다음 예제와 같이 태그를 수락하는 AIDL 인터페이스를 제공하고 이를 Qt로 전달하는 것입니다.
public void setTag(Tag pTag) { Intent newIntent = new Intent(); newIntent.putExtra(NfcAdapter.EXTRA_TAG, pTag); QtNative.onNewIntent(newIntent); }
C++ 개요
C++ API는 Qt NFC API의 전체 기능 세트에 대한 액세스를 제공합니다. 이 섹션에서는 개발자가 사용할 수 있는 주요 기능을 소개합니다.
NFC 태그 감지
QNearFieldManager 클래스는 디바이스 범위 내에 들어오는 새로운 NFC 태그를 감지하는 역할을 담당합니다. QNearFieldManager::targetDetected () 및 QNearFieldManager::targetLost() 신호는 태그가 범위 내에 들어오거나 범위를 벗어날 때 방출됩니다. 전달된 QNearFieldTarget 매개 변수는 감지된 각 태그에 대한 기본 상호 작용 지점 역할을 합니다. 하지만 QNearFieldManager::startTargetDetection()가 호출될 때까지 감지가 실제로 시작되지는 않습니다.
m_manager = new QNearFieldManager(this); connect(m_manager, &QNearFieldManager::targetDetected, this, &MainWindow::targetDetected); connect(m_manager, &QNearFieldManager::targetLost, this, &MainWindow::targetLost); m_manager->startTargetDetection(QNearFieldTarget::NdefAccess);
마지막으로 감지를 중지할 수 있습니다:
m_manager->stopTargetDetection();
각 QNearFieldTarget 인스턴스는 관련 QNearFieldManager 인스턴스가 소유하지만 각 인스턴스를 수동으로 삭제하는 것이 유용할 수 있습니다. 그렇지 않으면 QNearFieldManager 인스턴스가 삭제될 때까지 계속 존재하게 됩니다. 이를 위한 가장 좋은 방법은 QNearFieldManager::targetLost() 신호에 응답하는 것입니다:
void MainWindow::targetLost(QNearFieldTarget *target) { target->deleteLater(); }
참고: 대상 객체는 슬롯 내에서 삭제되는 경우에만 deleteLater()를 통해 삭제해야 합니다.
NFC 태그 연결하기
연결이 필요한 QNearFieldTarget 의 모든 함수는 자체적으로 연결을 생성합니다. 활성 연결은 한 번에 하나의 연결만 허용되므로 다른 인스턴스가 연결을 생성할 수 없습니다.
Qt 5는 다른 인스턴스가 연결할 수 있도록 함수가 끝날 때 태그 연결을 끊었습니다. QNearFieldManager::setKeepConnection()을 사용하면 이 동작을 변경할 수 있습니다.
Qt 6부터 QNearFieldTarget 은 기본적으로 연결을 유지합니다. QNearFieldTarget 가 파괴되거나 QNearFieldManager::disconnect()가 호출될 때만 연결이 닫힙니다.
NDEF 메시지 읽기 및 쓰기
QNearFieldManager::targetDetected() 신호가 반환하는 QNearFieldTarget 인스턴스는 태그와 상호 작용하는 데 사용됩니다. 메시지 읽기 및 쓰기는 비동기 작업입니다. QNearFieldTarget::RequestId 클래스는 개별 작업과 그 결과를 연결합니다.
void MainWindow::targetDetected(QNearFieldTarget *target) { switch (m_touchAction) { case NoAction: break; case ReadNdef: connect(target, &QNearFieldTarget::ndefMessageRead, this, &MainWindow::ndefMessageRead); connect(target, &QNearFieldTarget::error, this, &MainWindow::targetError); m_request = target->readNdefMessages(); if (!m_request.isValid()) // cannot read messages targetError(QNearFieldTarget::NdefReadError, m_request); break; case WriteNdef: connect(target, &QNearFieldTarget::requestCompleted, this, &MainWindow::ndefMessageWritten); connect(target, &QNearFieldTarget::error, this, &MainWindow::targetError); m_request = target->writeNdefMessages(QList<QNdefMessage>() << ndefMessage()); if (!m_request.isValid()) // cannot write messages targetError(QNearFieldTarget::NdefWriteError, m_request); break; } }
QNearFieldTarget::readNdefMessages() 요청이 성공적으로 처리되면 QNearFieldTarget::ndefMessageRead() 신호가 전송됩니다. 반환된 각 QNdefMessage 은 0개 이상의 QNdefRecord 항목으로 구성될 수 있으며, 유형에 따라 식별할 수 있습니다. 레코드 처리에 대한 자세한 내용은 QNdefRecord 클래스 문서를 참조하세요. 위의 코드에서 볼 수 있듯이, NDEF 메시지 쓰기는 QNearFieldTarget::writeNdefMessages()를 통해 트리거됩니다. 쓰기 작업이 성공적으로 완료되면 해당 요청 ID와 함께 QNearFieldTarget::requestCompleted() 신호가 전송되어 표시됩니다. 읽기 또는 쓰기 중 모든 유형의 오류는 QNearFieldTarget::error()를 통해 표시됩니다.
© 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.