【问题标题】:Xamarin Android NDEF Format ISO 15693 NFC TagXamarin Android NDEF 格式 ISO 15693 NFC 标签
【发布时间】:2019-08-19 16:51:15
【问题描述】:

嗨, 我需要 NDEF 格式化 ISO 15693 NFC 标签。图像中的标签已使用 NXP 工具和我的应用程序写入标签的 Text Guid 进行了 NDEF 格式。如果需要,我希望我的应用程序也能够格式化标签,但无法找到有关如何实现此目的的任何信息。

任何帮助表示赞赏。 谢谢 保罗。

【问题讨论】:

标签: c# xamarin.android


【解决方案1】:

在对标志等进行大量测试后,我最终发现以下代码有效。

protected override void OnNewIntent(Intent intent)
    {

        try
        {

            if (inWriteMode)
            {

                inWriteMode = false;

                Tag tag = intent.GetParcelableExtra(NfcAdapter.ExtraTag) as Tag;

                byte[] id = tag.GetId();

                NfcV nfcvTag = NfcV.Get(tag);

                int[] intArray = new int[36];

                // 4d196b8c-aa42-4f90-924f-b953654c31f7 (Length = 36)
                string guidStr = Guid.NewGuid().ToString();

                char[] guidChars = guidStr.ToCharArray();

                for (int i = 0; i < guidChars.Count(); i++)
                {
                    int value = Convert.ToInt32(guidChars[i]);
                    intArray[i] = value;
                }

                if (nfcvTag != null)
                {

                    nfcvTag.Connect();

                    // 0x20 with id (UID) works! (addressed v non addressed using 0,0,0,0,0,0,0,0)

                    //---------------------------------------------------------------------------------------

                    // E1 40 0E 00
                    byte[] cmd0 = new byte[] {
                    /* FLAGS   */ (byte)0x20, // 0x00 0x20 0x22 0x40 0x42 ????
                    /* COMMAND */ (byte)0x21,
                    /* UID     */ (byte)0x00, (byte)0x00, (byte)0x00, (byte)0x00, (byte)0x00, (byte)0x00, (byte)0x00, (byte)0x00,
                    /* OFFSET  */ (byte)0x00,
                    /* DATA    */ (byte)0xE1, (byte)0x40, (byte)0x0E, (byte)0x00
                    };

                    Array.Copy(id, 0, cmd0, 2, 8);

                    //---------------------------------------------------------------------------------------

                    // 03 2B D1 01
                    byte[] cmd1 = new byte[] {
                    /* FLAGS   */ (byte)0x20,
                    /* COMMAND */ (byte)0x21,
                    /* UID     */ (byte)0x00, (byte)0x00, (byte)0x00, (byte)0x00, (byte)0x00, (byte)0x00, (byte)0x00, (byte)0x00,
                    /* OFFSET  */ (byte)0x01,
                    /* DATA    */ (byte)0x03, (byte)0x2B, (byte)0xD1, (byte)0x01
                    };

                    Array.Copy(id, 0, cmd1, 2, 8);

                    //---------------------------------------------------------------------------------------

                    // 27 54 02 65
                    byte[] cmd2 = new byte[] {
                    /* FLAGS   */ (byte)0x20,
                    /* COMMAND */ (byte)0x21,
                    /* UID     */ (byte)0x00, (byte)0x00, (byte)0x00, (byte)0x00, (byte)0x00, (byte)0x00, (byte)0x00, (byte)0x00,
                    /* OFFSET  */ (byte)0x02,
                    /* DATA    */ (byte)0x27, (byte)0x54, (byte)0x02, (byte)0x65
                    };

                    Array.Copy(id, 0, cmd2, 2, 8);

                    //---------------------------------------------------------------------------------------

                    // 6E XX XX XX
                    byte[] cmd3 = new byte[] {
                    /* FLAGS   */ (byte)0x20,
                    /* COMMAND */ (byte)0x21,
                    /* UID     */ (byte)0x00, (byte)0x00, (byte)0x00, (byte)0x00, (byte)0x00, (byte)0x00, (byte)0x00, (byte)0x00,
                    /* OFFSET  */ (byte)0x03,
                    /* DATA    */ (byte)0x6E, (byte)intArray[0], (byte)intArray[1], (byte)intArray[2]
                    };

                    Array.Copy(id, 0, cmd3, 2, 8);

                    //---------------------------------------------------------------------------------------

                    // XX XX XX XX
                    byte[] cmd4 = new byte[] {
                    /* FLAGS   */ (byte)0x20,
                    /* COMMAND */ (byte)0x21,
                    /* UID     */ (byte)0x00, (byte)0x00, (byte)0x00, (byte)0x00, (byte)0x00, (byte)0x00, (byte)0x00, (byte)0x00,
                    /* OFFSET  */ (byte)0x04,
                    /* DATA    */ (byte)intArray[3], (byte)intArray[4], (byte)intArray[5], (byte)intArray[6]
                    };

                    Array.Copy(id, 0, cmd4, 2, 8);

                    //---------------------------------------------------------------------------------------

                    // XX XX XX XX
                    byte[] cmd5 = new byte[] {
                    /* FLAGS   */ (byte)0x20,
                    /* COMMAND */ (byte)0x21,
                    /* UID     */ (byte)0x00, (byte)0x00, (byte)0x00, (byte)0x00, (byte)0x00, (byte)0x00, (byte)0x00, (byte)0x00,
                    /* OFFSET  */ (byte)0x05,
                    /* DATA    */ (byte)intArray[7], (byte)intArray[8], (byte)intArray[9], (byte)intArray[10]
                    };

                    Array.Copy(id, 0, cmd5, 2, 8);

                    //---------------------------------------------------------------------------------------

                    // XX XX XX XX
                    byte[] cmd6 = new byte[] {
                    /* FLAGS   */ (byte)0x20,
                    /* COMMAND */ (byte)0x21,
                    /* UID     */ (byte)0x00, (byte)0x00, (byte)0x00, (byte)0x00, (byte)0x00, (byte)0x00, (byte)0x00, (byte)0x00,
                    /* OFFSET  */ (byte)0x06,
                    /* DATA    */ (byte)intArray[11], (byte)intArray[12], (byte)intArray[13], (byte)intArray[14]
                    };

                    Array.Copy(id, 0, cmd6, 2, 8);

                    //---------------------------------------------------------------------------------------

                    // XX XX XX XX
                    byte[] cmd7 = new byte[] {
                    /* FLAGS   */ (byte)0x20,
                    /* COMMAND */ (byte)0x21,
                    /* UID     */ (byte)0x00, (byte)0x00, (byte)0x00, (byte)0x00, (byte)0x00, (byte)0x00, (byte)0x00, (byte)0x00,
                    /* OFFSET  */ (byte)0x07,
                    /* DATA    */ (byte)intArray[15], (byte)intArray[16], (byte)intArray[17], (byte)intArray[18]
                    };

                    Array.Copy(id, 0, cmd7, 2, 8);

                    //---------------------------------------------------------------------------------------

                    // XX XX XX XX
                    byte[] cmd8 = new byte[] {
                    /* FLAGS   */ (byte)0x20,
                    /* COMMAND */ (byte)0x21,
                    /* UID     */ (byte)0x00, (byte)0x00, (byte)0x00, (byte)0x00, (byte)0x00, (byte)0x00, (byte)0x00, (byte)0x00,
                    /* OFFSET  */ (byte)0x08,
                    /* DATA    */ (byte)intArray[19], (byte)intArray[20], (byte)intArray[21], (byte)intArray[22]
                    };

                    Array.Copy(id, 0, cmd8, 2, 8);

                    //---------------------------------------------------------------------------------------

                    // XX XX XX XX
                    byte[] cmd9 = new byte[] {
                    /* FLAGS   */ (byte)0x20,
                    /* COMMAND */ (byte)0x21,
                    /* UID     */ (byte)0x00, (byte)0x00, (byte)0x00, (byte)0x00, (byte)0x00, (byte)0x00, (byte)0x00, (byte)0x00,
                    /* OFFSET  */ (byte)0x09,
                    /* DATA    */ (byte)intArray[23], (byte)intArray[24], (byte)intArray[25], (byte)intArray[26]
                    };

                    Array.Copy(id, 0, cmd9, 2, 8);

                    //---------------------------------------------------------------------------------------

                    // XX XX XX XX
                    byte[] cmd10 = new byte[] {
                    /* FLAGS   */ (byte)0x20,
                    /* COMMAND */ (byte)0x21,
                    /* UID     */ (byte)0x00, (byte)0x00, (byte)0x00, (byte)0x00, (byte)0x00, (byte)0x00, (byte)0x00, (byte)0x00,
                    /* OFFSET  */ (byte)0x0A,
                    /* DATA    */ (byte)intArray[27], (byte)intArray[28], (byte)intArray[29], (byte)intArray[30]
                    };

                    Array.Copy(id, 0, cmd10, 2, 8);

                    //---------------------------------------------------------------------------------------

                    // XX XX XX XX
                    byte[] cmd11 = new byte[] {
                    /* FLAGS   */ (byte)0x20,
                    /* COMMAND */ (byte)0x21,
                    /* UID     */ (byte)0x00, (byte)0x00, (byte)0x00, (byte)0x00, (byte)0x00, (byte)0x00, (byte)0x00, (byte)0x00,
                    /* OFFSET  */ (byte)0x0B,
                    /* DATA    */ (byte)intArray[31], (byte)intArray[32], (byte)intArray[33], (byte)intArray[34]
                    };

                    Array.Copy(id, 0, cmd11, 2, 8);

                    //---------------------------------------------------------------------------------------

                    // XX XX XX XX
                    byte[] cmd12 = new byte[] {
                    /* FLAGS   */ (byte)0x20,
                    /* COMMAND */ (byte)0x21,
                    /* UID     */ (byte)0x00, (byte)0x00, (byte)0x00, (byte)0x00, (byte)0x00, (byte)0x00, (byte)0x00, (byte)0x00,
                    /* OFFSET  */ (byte)0x0C,
                    /* DATA    */ (byte)intArray[35], (byte)0x00, (byte)0x00, (byte)0x00
                    };

                    Array.Copy(id, 0, cmd12, 2, 8);

                    //---------------------------------------------------------------------------------------

                    byte[] response0 = nfcvTag.Transceive(cmd0);
                    byte[] response1 = nfcvTag.Transceive(cmd1);
                    byte[] response2 = nfcvTag.Transceive(cmd2);
                    byte[] response3 = nfcvTag.Transceive(cmd3);
                    byte[] response4 = nfcvTag.Transceive(cmd4);
                    byte[] response5 = nfcvTag.Transceive(cmd5);
                    byte[] response6 = nfcvTag.Transceive(cmd6);
                    byte[] response7 = nfcvTag.Transceive(cmd7);
                    byte[] response8 = nfcvTag.Transceive(cmd8);
                    byte[] response9 = nfcvTag.Transceive(cmd9);
                    byte[] response10 = nfcvTag.Transceive(cmd10);
                    byte[] response11 = nfcvTag.Transceive(cmd11);
                    byte[] response12 = nfcvTag.Transceive(cmd12);

                    //---------------------------------------------------------------------------------------

                    nfcvTag.Close();

                }

                DisplayMessage("Guid (" + guidStr + ") written to tag.");

            }

        }
        catch (Exception ex)
        {
            DisplayMessage("Exception - " + ex.Message);
        }

    }

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-02-08
    • 1970-01-01
    • 1970-01-01
    • 2012-05-10
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多