18

新的 2.3.3 SDK 包括改进的 NFC 支持,我想编写一个依赖于此的应用程序。最终,我希望能够从同时进入该字段的多个标签中读取数据,但 Android 似乎只在第一个进入该字段的标签上触发 - 随后的标签将被忽略。

通过阅读我正在使用的标签(Mifare Classic)的 NFC 规范(ISO/IEC 14443-3),我应该能够向标签发送“停止”命令,这将导致它停止响应,并允许我阅读该领域的下一个标签。Android 不直接在任何子TagTechnology类上支持停止命令,所以我尝试自己直接使用transceive(new byte[] {0x50, 0x00}). 这会引发IOException, 消息“收发失败”。

诚然,我是从主线程中完成所有这些工作的,我理解这是一个坏主意,但我只想尽可能轻松地测试这个概念。

是否可以同时与现场的多个标签进行通信?我究竟做错了什么?

4

3 回答 3

8

不幸的是,目前你想要的东西是不可能的,除非你做一些非常高级的黑客,这几乎不是一个好主意:)

如果您在 中发送正确的字节,可能您可以停止卡transceive(),就像您现在尝试做的那样。但是由于停止(或者更确切地说,您尝试发送的 HLTA)是一个 ISO14443-3A 命令,因此这将无法通过使用“加密”管道的 MifareClassic 接口起作用。不幸的是,直接通过 NfcA 接口传输也不适用于当前堆栈。

即使您可以让卡停止,这也不会自动导致手机中的 NFC 芯片恢复轮询新标签 - 因为您正在“绕过”堆栈。

于 2011-04-11T15:35:26.533 回答
1

根据我的短暂经验,您不能使用多个标签。如果字段中有两个标签,您没有从标签收到 ID,则它是二进制零。所以我的猜测是,此时,您只能访问一个标签,并且该字段中最多只能有一个。

于 2011-03-16T08:43:27.820 回答
0

您是否使用收发器成功发送其他命令,例如读取块 (0x30, 0x(block)) 或验证扇区命令?只是想您可能想确保首先正确使用收发器。

于 2011-03-13T22:20:16.980 回答