我有一部EMV智能卡,我想用手机通讯。 通信本身通过IsoDep没有问题,但我无法弄清楚如何获得ATR。 据我所知,意图应该包含ATR,有人可以告诉我我需要的代码吗?
或者,如果这是不可能的,也许有人知道如何使用像SELECT这样的命令来热复位卡,其中答案是ATR。
答案 0 :(得分:2)
非接触式卡没有ATR。但是,您可能对ATS(选择答案)的历史字节感兴趣。您可以致电getHistoricalBytes()
:
Tag tag = (Tag) intent.getParcelableExtra(NfcAdapter.EXTRA_TAG));
IsoDep iso = IsoDep.get(tag);
NfcA nfcA = NfcA.get(tag);
if (nfcA == null || iso == null)
return; // not an IsoDep+NfcA tag
byte[] histBytes = iso.getHistoricalBytes();
...
请注意,这仅适用于ISO 14443 Type A标记(NfcA
)。对于B类标签(NfcB
),您可能需要调查getHiLayerResponse()
。
答案 1 :(得分:-1)
非接触式卡确实返回ATR。但是,您无法从当前的Android NFC API获取ATR。 Android NFC API仅返回ATR的历史字节。
非接触式卡返回ATR的原因是: 请注意,ATR是7816重置答案。阅读器(在这种情况下为nfc电话)使用ISO 7816(T = CL)APDU交换与智能卡通信,该交换通过非接触式接口ISO 14443-4传输。由于在这种情况下有ISO 7816,您将获得ATR。