验证后写入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。验证后,我使用Ndef
class的writeNdefMessage()
方法写入NDEF内容,但我无法写入。
This 是我找到验证标签的方法的地方。
这是我的方法:
- 验证标签(使用那段代码)
- 如果身份验证响应等于我的pack,则继续写入 NDEF 消息
但是,每当我调用 writeNdefMessage()
时,我都会收到 java.io.IOException
。
无法写入的原因是在实际写入标签之前再次失去认证状态。对于大多数设备(尽管存在一些例外!),调用 tag.connect()
/tag.close()
将导致标签重新激活,从而失去其身份验证状态。因此,您需要在同一个连接中进行身份验证和写入。
因为你不能通过Ndef
抽象发送低级命令,这意味着你必须用低级命令来完成所有的写作。 IE。您必须自己为该特定标签类型(在您的情况下为 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 页):
mfu.write(pageNumber, data)
其中 data
是应写入页 pageNumber
的四字节数据值。
我正在使用这段代码验证我的标签
nfcA.connect();
byte[] authResponse = nfcA.transceive(new byte[]{
(byte)0x1b,
pwd[0], pwd[1], pwd[2], pwd[3]
});
nfcA.close();
我检查了 authResponse 的结果,它等于我的 pack。验证后,我使用Ndef
class的writeNdefMessage()
方法写入NDEF内容,但我无法写入。
This 是我找到验证标签的方法的地方。
这是我的方法:
- 验证标签(使用那段代码)
- 如果身份验证响应等于我的pack,则继续写入 NDEF 消息
但是,每当我调用 writeNdefMessage()
时,我都会收到 java.io.IOException
。
无法写入的原因是在实际写入标签之前再次失去认证状态。对于大多数设备(尽管存在一些例外!),调用 tag.connect()
/tag.close()
将导致标签重新激活,从而失去其身份验证状态。因此,您需要在同一个连接中进行身份验证和写入。
因为你不能通过Ndef
抽象发送低级命令,这意味着你必须用低级命令来完成所有的写作。 IE。您必须自己为该特定标签类型(在您的情况下为 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 页):mfu.write(pageNumber, data)
其中
data
是应写入页pageNumber
的四字节数据值。