【问题标题】:NFC with ACR122U and AndroidNFC 与 ACR122U 和 Android
【发布时间】:2014-07-29 09:17:42
【问题描述】:

http://www.acs.com.hk/en/products/3/acr122u-usb-nfc-reader/

我正在使用上面链接的 Android 库,并且正在尝试读/写 NFC 标签。标签将具有我知道的格式(可能类似于 JSON)。我能够运行示例应用程序并看到阅读器正在工作并检测 NFC 标签,但我该如何实际读取或写入它们呢? API 有点混乱。任何帮助深表感谢。

到目前为止,在我的应用程序中,我已经想出了如何获取阅读器状态和阅读器类型/名称,但没有关于 NFC 标签本身。

【问题讨论】:

    标签: java android nfc acr122


    【解决方案1】:

    您可以使用 Reader 类 (com.acs.smartcard.Reader) 的实例与阅读器和阅读器范围内的 NFC 标签进行通信。

    根据 ACR122U 的版本,您将需要Reader.transmit() 方法或Reader.control() 方法(结合控制代码Reader.IOCTL_CCID_ESCAPE)向阅读器发送命令。枚举和访问标签的相关直接命令在应用程序编程接口手册中进行了描述(请参阅herehere,具体取决于您拥有的阅读器版本)。

    一旦您可以通过Reader 对象访问标签,您就可以实现NFC Forum 的标签操作规范来与NFC 标签交互。

    【讨论】:

      【解决方案2】:

      除了供应商 ACS 提供的 SDK,您可以尝试Libnfc,这是一个具有 LGPL 许可证的开源低级 NFC SDK。您可以在其上构建应用程序。

      Libnfc 在 Linux 和 Windows 上都支持 ACR122U。

      【讨论】:

        【解决方案3】:

        它也不起作用。 responseLength 始终为 0。它不应该是。 该命令是绝对正确的读卡 ID 命令: {(byte)0xFF, (byte)0xCA, (byte)0x00, (byte)0x00, (byte)0x04 它在具有相同 ACR122 usb 阅读器的 Windows Java 示例中完美运行:

        // Transmit APDU
        byte[] command =  {(byte)0xFF, (byte)0xCA, (byte)0x00, (byte)0x00, (byte)0x04};           
        byte[] response = new byte[100];
        int responseLength = 0;
        
        try {
            responseLength = mReader.transmit(0, command, command.length, response,   response.length);
        } catch (ReaderException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
        
        TextView tv = (TextView)findViewById(R.id.main_text_view_response);
        tv.setText( "resp: "+Integer.toString(responseLength) + ": "+ Integer.toString( response[0] ) );
        

        【讨论】:

        • 你试过FF CA 00 00 00 btw,你设法在android中获得Desfire UID了吗?可以分享代码示例吗?
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2016-07-26
        • 2020-03-30
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多