首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Xamarin Android NDEF格式ISO 15693 NFC标签

Xamarin Android NDEF格式ISO 15693 NFC标签
EN

Stack Overflow用户
提问于 2019-06-30 06:20:17
回答 1查看 384关注 0票数 1

嗨,我有一个NDEF格式的ISO 15693 NFC标签的要求。图像中的标签已使用恩智浦工具和我的应用程序写入标签的文本Guid进行NDEF格式化。我希望我的应用程序也能够格式化标签,如果需要,但一直无法找到如何实现这一点的任何信息。

感谢您的帮助。谢谢保罗。

EN

回答 1

Stack Overflow用户

发布于 2019-08-19 16:14:52

在对标志等进行了大量测试之后,我最终发现下面的代码可以工作。

代码语言:javascript
运行
复制
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);
        }

    }
票数 -1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/56821205

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档