验证后写入NTAG216?

时间:2015-12-16 07:44:44

标签: android authentication nfc mifare ndef

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

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

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

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

这是我的方法:

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

但是,每当我打电话给java.io.IOException时,我都会收到writeNdefMessage()

1 个答案:

答案 0 :(得分:1)

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

由于无法通过Ndef抽象发送低级命令,这意味着您必须使用低级命令进行所有写操作。即您必须自己为该特定标记类型(在您的情况下为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的四字节数据值。