采用ACR122U和Android的NFC

时间:2014-07-29 09:17:43

标签: java android nfc acr122

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

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

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

3 个答案:

答案 0 :(得分:3)

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

根据ACR122U的版本,您需要Reader.transmit()方法或Reader.control()方法(与控制代码Reader.IOCTL_CCID_ESCAPE结合使用)才能向阅读器发送命令。 “应用程序编程接口”手册中介绍了用于枚举和访问标记的相关直接命令(请参阅herehere,具体取决于您所拥有的阅读器版本)。

一旦您可以通过Reader对象访问代码,就可以实施NFC Forum的代码操作规范来与NFC代码进行互动。

答案 1 :(得分:0)

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

// 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] ) );

答案 2 :(得分:0)

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

Libnfc在Linux和Windows上都支持ACR122U。

相关问题