QML - NFC
-
Ciao a tutti,
ho provato a scrivere una app minimale QML che legga un tag NFC con del testo al suo interno.Il risultato è (quasi) buono. Questo è il codice:
(nel file .PRO)
QT += quick nfcimport QtQuick 2.9 import QtQuick.Window 2.2 import QtNfc 5.5 Window { visible: true width: 640 height: 480 title: qsTr("NFC") Text { id: nfc_text anchors.centerIn: parent text: "Avvicina un tag NFC!!" } NearField { orderMatch: false polling: true onMessageRecordsChanged: { var i; for (i = 0; i < messageRecords.length; ++i) { var data = ""; if (messageRecords[i].typeNameFormat === NdefRecord.NfcRtd) { if (messageRecords[i].type === "T") { data = messageRecords[i].text; } else if (messageRecords[i].type === "U") { data = messageRecords[i].uri; } } if (!data) data = "Unknown content"; console.log("NFC> "+data) nfc_text.text=data } } } }
Compilata su Samsung S9, tutto ok.
L'unico problema è che quando si avvicina un tag per la PRIMA volta si apre la App Samsung di default che mostra il contenuto del Tag.
A questo punto si ritorna sull'App e, riprovando ad avvicinare il Tag, dalla seconda volta in poi tutto funziona bene: l'App risponde e mostra il contenuto a centro pagina.
E' come se la prima volta (quindi dopo l'avvio dell'App) non sia in ascolto quindi la gestione della lettura viene demandata dall'App di default.Nel codice però c'è polling: true, quindi qualcosa non torna.
C'è qualcuno che ne ha già fatto le spese?
Grazie
Gianluca -
@bilbo69 Ciao,
Probabilmente questo bug: https://bugreports.qt.io/browse/QTBUG-64415Questo codice funziona per me:
import QtQuick 2.9 import QtQuick.Window 2.2 import QtNfc 5.5 Window { visible: true width: 640 height: 480 title: qsTr("NFC") Component.onCompleted: loader.sourceComponent = nfcComponent Text { id: nfc_text anchors.centerIn: parent text: "Avvicina un tag NFC!!" } Loader{ id: loader } Component{ id: nfcComponent NearField { orderMatch: false polling: true onMessageRecordsChanged: { var i; for (i = 0; i < messageRecords.length; ++i) { var data = ""; if (messageRecords[i].typeNameFormat === NdefRecord.NfcRtd) { if (messageRecords[i].type === "T") { data = messageRecords[i].text; } else if (messageRecords[i].type === "U") { data = messageRecords[i].uri; } } if (!data) data = "Unknown content"; console.log("NFC> "+data) nfc_text.text=data } } onTagFound: console.log("TAG found !!") onTagRemoved: console.log("TAG removed!!") } } }