假设我们有一个定制芯片,其中包含存储为 NDEF 的数据,以及存储在标准 NDEF数据之后的自定义数据。我们怎样才能用Android读取这些数据?
答案 0 :(得分:1)
这在很大程度上取决于您使用的标记硬件的类型。 NDEF是一个抽象层,允许您在任何标记硬件上以相同的方式处理数据。在NDEF层的后面,每个标记平台都有自己的内存组织和自己的一组命令来访问数据。
您可以在NFC Forum's website上找到每个标准化标签平台的规格,作为“X型标签操作规范”。
例如,如果您有一个Type 2标记(具有平坦的内存结构并使用简单的读/写命令来访问该内存),则将从第4页开始存储NDEF消息。您可以使用更高的页面来存储专有数据(例如,从第16页开始)然后您可以使用NfcA标记技术从Android访问该标记:
Tag tag = intent.getParcelableExtra(NfcAdapter.EXTRA_TAG);
NfcA nfcA = NfcA.get(tag);
nfcA.connect();
byte[] result = nfcA.transceive(new byte[] {
(byte)0x30, /* CMD = READ */
(byte)0x10 /* PAGE = 16 */
});
答案 1 :(得分:1)
是的,这是可能的。您可以使用transceive(byte[] data)
方法将RFID命令发送到标签。
要发送的命令取决于您使用的标记类型。您应该阅读标签类型的命令结构(ISO14443或ISO15693)。在使用此类命令时,您可能需要深入了解标准以了解如何创建正确的命令序列。
ISO15693示例,读取单个块,命令代码0x20(未经测试):
byte[] readSingleBlock(int block) throws IOException {
byte[] command = new byte[3];
command[0] = 0x12; // flags
command[1] = 0x20; // read single block command
command[2] = (byte) block;
byte result[] = nfcv.transceive(command);
return result;
}