【问题标题】:Reading multiple NFC tags simultaneously in Android在 Android 中同时读取多个 NFC 标签
【发布时间】:2011-04-11 23:35:26
【问题描述】:

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

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

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

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

【问题讨论】:

    标签: java android android-sdk-2.3 nfc


    【解决方案1】:

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

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

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

    【讨论】:

    • 感谢您的明确答复!
    【解决方案2】:

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

    【讨论】:

    • RF 协议支持冲突解决和解析多个标签 - 所以问题是,为什么我在尝试停止我已经阅读的标签时会出错?
    • 只是因为SDK不支持碰撞或同时多个转发器。我不知道该错误,但此时当转发器进入该字段时您会收到一个 Intent,该 Intent 正是针对单个标签的。取决于标签协议,此时由于SDK太有限,您可以不查找其他标签的UID。一个干净的解决方案将涉及支持多个标签的更新 SDK。当然我可以想象一些“黑客”或使用 NDK 来克服当前的限制。
    • 由于这似乎是我们最接近答案的地方,您能用额外的信息更新您的问题吗?
    【解决方案3】:

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

    【讨论】:

    • 好点。我没有尝试直接用 transcieve 做任何其他事情;我试试看。
    • 调用readBlock()(认证后)工作正常;调用transceive()readblock() 输出相同的字节也是如此。不过,尝试停止该卡仍会产生 IOException
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-04-19
    相关资源
    最近更新 更多