首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >ACR122 - Android /如何提取UID

ACR122 - Android /如何提取UID
EN

Stack Overflow用户
提问于 2015-04-23 16:32:11
回答 2查看 2.6K关注 0票数 2

我尝试将ACR122集成到我的安卓应用程序中。我正在使用ANDROID库(

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

)。

一切正常,我可以检测卡的存在,但我想提取卡的UID/ID。有人知道这样做的功能吗?

您有这种类型的集成的示例吗?

EN

回答 2

Stack Overflow用户

发布于 2015-04-23 18:03:27

如果是Mifare卡,您需要将此APDU字节数组发送到卡:

..。我不确定APDU,但您可能需要将此ACR122封装到特定的API方法中,如transmit()

更新

示例代码:

代码语言:javascript
复制
byte[] command = new byte[] { (byte) 0xFF, (byte) 0xCA, (byte) 0x00, (byte) 0x00, (byte) 0x00 };
 byte[] response = new byte[300];
 int responseLength;
 responseLength = reader.transmit(slotNum, command, command.length, response,response.length);
 System.out.println(new String(response));

对象和

是插槽编号。我不确定如何找到它,因为我没有ACR要测试。但是,如果你告诉我你能够与读者建立基本的交流,你可能就知道slotNum了。

票数 7
EN

Stack Overflow用户

发布于 2021-03-02 02:54:11

为了防止在尝试读取UID时出现此错误:

com.acs.smartcard.InvalidDeviceStateException:当前状态不等于specific。

这应该是:

代码语言:javascript
复制
int slotNum = 0;
byte[] payload = new byte[] { (byte) 0xFF, (byte) 0xCA, (byte) 0x00, (byte) 0x00, (byte) 0x00 };
byte[] response = new byte[7]; // 7 bytes + 90 00 (9 bytes)
try {
    reader.power(slotNum, Reader.CARD_WARM_RESET);
    reader.setProtocol(slotNum, Reader.PROTOCOL_T0 | Reader.PROTOCOL_T1);
    reader.transmit(slotNum, payload, payload.length, response, response.length);
    logBuffer(response, response.length);
} catch (ReaderException e) {
    Log.e(LOG_TAG, e.getMessage(), e);
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/29817873

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档