新的2.3.3 SDK包括改进的NFC支持,我想编写一个依赖于此的应用程序。最后,我希望能够从同时进入该字段的多个标签中读取数据,但Android似乎仅在第一个进入该字段的标签上触发 - 后续的被忽略。
通过阅读我正在使用的标签(Mifare Classic)的NFC规范(ISO / IEC 14443-3),我应该能够向标签发送'halt'命令,这将导致它停止响应,并允许我阅读该字段中的下一个标记。 Android不直接在任何TagTechnology
子类上支持halt命令,因此我尝试使用transceive(new byte[] {0x50, 0x00})
直接自行发送。这会抛出IOException
,并显示消息“收发失败”。
不可否认,我正在从主线程中做到这一切,我理解这是一个坏主意,但我只想尽可能轻松地测试这个概念。
是否可以同时与现场的多个标签进行通信?我做错了什么?
答案 0 :(得分:8)
目前不幸的是,你想要的是什么,除非你做了一些非常先进的hackery,这几乎不是一个好主意:)
如果您在transceive()
发送正确的字节,可能会暂停该卡,因为您现在正在尝试这样做。但是,由于停止(或者更确切地说,您尝试发送的HLTA)是ISO14443-3A命令,这将无法通过MifareClassic接口 - 它使用加密"管。不幸的是,通过NfcA接口直接传输也无法与当前堆栈一起工作。
即使你可以让卡停止,这也不会自动导致手机中的NFC芯片继续轮询新标签 - 因为你正在"四处走动"堆栈。
答案 1 :(得分:1)
根据我的短暂经验,您无法使用多个标签。 如果字段中有两个标记,则表示您没有从标记中收到ID,它是二进制零。 所以我的猜测是,在这一点上,你只能访问一个标签,并且不能超过一个标签。
答案 2 :(得分:0)
您是否成功使用收发器发送其他命令,例如读取块(0x30,0x(块))或验证扇区命令?只是想你可能想要确保你首先正确使用收发器。