Planned maintenance has been done but it did not solve the problem. So work will continue on this and a new time for trying updates will be announced asap.

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 nfc

    import 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-64415

    Questo 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!!")
            }
        }
    }
    

Log in to reply