android – 验证后写入NTAG216?

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

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

我检查了authResponse的结果,它等于我的包.在进行身份验证之后,我使用Ndef类的writeNdefMessage()方法编写NDEF内容,但我无法编写.

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

这是我的方法:

>验证标签(使用那段代码)
>如果身份验证的响应等于我的包,请继续编写NDEF消息

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

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

由于您无法通过Ndef抽象发送低级命令,这意味着您必须使用低级命令进行所有写入操作.即您必须自己为该特定标记类型(在您的情况下为NFC论坛类型2标记操作规范)重新实现NDEF抽象层,并逐页编写NDEF消息.

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

>进行身份验证:

mfu.transceive(new byte[]{ (byte)0x1b, pwd[0], pwd[1], pwd[2], pwd[3] });

>逐页编写标签(您可能需要编写第4页及以后页面,其中包含包含在标签为0x03的TLV结构中的NDEF消息,如果您需要对页面3进行任何更改,您可能还需要编写第3页能力容器):

mfu.write(pageNumber, data)

其中data是要写入pageNumber的四字节数据值.

点赞