验证后写入NTAG216?

Write to NTAG216 after authenticating?

我正在使用这段代码验证我的标签

nfcA.connect();
byte[] authResponse = nfcA.transceive(new byte[]{
                (byte)0x1b,
                pwd[0], pwd[1], pwd[2], pwd[3]
        });
nfcA.close();

我检查了 authResponse 的结果,它等于我的 pack。验证后,我使用Ndefclass的writeNdefMessage()方法写入NDEF内容,但我无法写入。

This 是我找到验证标签的方法的地方。

这是我的方法:

但是,每当我调用 writeNdefMessage() 时,我都会收到 java.io.IOException

无法写入的原因是在实际写入标签之前再次失去认证状态。对于大多数设备(尽管存在一些例外!),调用 tag.connect()/tag.close() 将导致标签重新激活,从而失去其身份验证状态。因此,您需要在同一个连接中进行身份验证和写入。

因为你不能通过Ndef抽象发送低级命令,这意味着你必须用低级命令来完成所有的写作。 IE。您必须自己为该特定标签类型(在您的情况下为 NFC 论坛 2 类标签操作规范)重新实现 NDEF 抽象层,并逐页编写 NDEF 消息。

由于 NTAG216 应该被发现为 MifareUltralight,最简单的方法是使用 MifareUltralight 连接。那你可以

  1. 进行身份验证:

    mfu.transceive(new byte[]{ (byte)0x1b, pwd[0], pwd[1], pwd[2], pwd[3] });
    
  2. 逐页编写标签(您可能需要编写第 4 页及以后的页面,其中包含包装在带有标签 0x03 的 TLV 结构中的 NDEF 消息,您可能还如果您需要对功能容器进行任何更改,则需要编写第 3 页):

    mfu.write(pageNumber, data)
    

    其中 data 是应写入页 pageNumber 的四字节数据值。