Qt NFC Visión general
Con la API Qt NFC los casos de uso típicos son:
- Detección de etiquetas NFC.
- Lectura y escritura de mensajes NDEF.
- Registro de gestores de mensajes NDEF.
- Compartir archivos y mensajes.
Las siguientes secciones describen cómo utilizar las clases C++ de Qt NFC y los tipos QML para los casos de uso anteriores.
Nota: En Android, la detección de nuevas etiquetas NFC sólo funciona en aplicaciones en primer plano. Los servicios de Android no soportan esto debido a las limitaciones de la API en el lado de Android. La única forma de utilizar una etiqueta en un servicio es proporcionar una interfaz AIDL que acepte la etiqueta y reenviarla a Qt como se muestra en el siguiente ejemplo.
public void setTag(Tag pTag) { Intent newIntent = new Intent(); newIntent.putExtra(NfcAdapter.EXTRA_TAG, pTag); QtNative.onNewIntent(newIntent); }
Visión general de C
La API C++ proporciona acceso a todas las funciones de la API Qt NFC. En esta sección se presentan las principales funciones disponibles para los desarrolladores.
Detección de etiquetas NFC
La clase QNearFieldManager es responsable de la detección de nuevas etiquetas NFC que entran en el alcance del dispositivo. Las señales QNearFieldManager::targetDetected() y QNearFieldManager::targetLost() se emiten cuando una etiqueta entra o sale del alcance. El parámetro QNearFieldTarget actúa como punto de interacción principal para cada etiqueta detectada. Sin embargo, la detección no comienza hasta que se llama a 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);
Por último, la detección puede detenerse:
m_manager->stopTargetDetection();
Aunque cada instancia QNearFieldTarget es propiedad de su instancia QNearFieldManager relacionada, puede ser beneficioso eliminar manualmente cada instancia. De lo contrario, seguirían existiendo hasta que se elimine la instancia QNearFieldManager. La mejor forma de hacerlo sería en respuesta a la señal QNearFieldManager::targetLost():
void MainWindow::targetLost(QNearFieldTarget *target) { target->deleteLater(); }
Nota: El objeto de destino sólo debe eliminarse mediante deleteLater() si se elimina dentro de la ranura.
Conexión de etiquetas NFC
Todas las funciones de QNearFieldTarget que requieran una conexión crearán una por sí mismas. Una conexión activa impedirá que otras instancias creen una conexión porque sólo se permite una conexión a la vez.
Qt 5 desconecta la etiqueta al final de las funciones para permitir que otras instancias se conecten. QNearFieldManager::setKeepConnection() permitía cambiar este comportamiento.
Desde Qt 6, QNearFieldTarget mantiene la conexión por defecto. La conexión sólo se cierra cuando se destruye QNearFieldTarget o se llama a QNearFieldManager::disconnect().
Lectura y Escritura de Mensajes NDEF
La instancia QNearFieldTarget devuelta por la señal QNearFieldManager::targetDetected() se utiliza para interactuar con la etiqueta. La lectura y escritura de un mensaje es una operación asíncrona. La clase QNearFieldTarget::RequestId asocia las operaciones individuales y sus resultados.
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; } }
Una vez procesada con éxito la solicitud QNearFieldTarget::readNdefMessages(), se emite la señal QNearFieldTarget::ndefMessageRead(). Cada QNdefMessage devuelto puede constar de cero o más entradas QNdefRecord, que pueden identificarse por su tipo. Para más información sobre el procesamiento de registros, consulte la documentación de la clase QNdefRecord. Como demuestra el código anterior, la escritura de mensajes NDEF se activa a través de QNearFieldTarget::writeNdefMessages(). La finalización con éxito de la operación de escritura se indica mediante la emisión de la señal QNearFieldTarget::requestCompleted() con el id de solicitud correspondiente. Cualquier tipo de error durante la lectura o escritura se indica a través de QNearFieldTarget::error().
© 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.