从NDEF内容之后的NFC读取数据?

时间:2014-12-03 11:22:28

标签: android android-intent nfc ndef

假设我们有一个定制芯片,其中包含存储为 NDEF 的数据,以及存储在标准 NDEF数据之后的自定义数据。我们怎样才能用Android读取这些数据?

2 个答案:

答案 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;
}