在安卓系统中同时读取多个NFC标签

2022-09-02 22:29:08

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

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

诚然,我是从主线程开始做这一切的,我知道这是一个坏主意,但我只想尽可能轻松地测试这个概念。

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


答案 1

不幸的是,你想要的目前是不可能的,除非你做一些非常先进的黑客攻击,这几乎从来不是一个好主意:)

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

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


答案 2

根据我的短暂经验,您无法使用多个标签。如果字段中有两个标记,则您没有从该标记接收 ID,则它是二进制零。所以我的猜测是,在这一点上,你只能访问一个标签,并且不能有超过一个标签在现场。


推荐