我有一张EMV智能卡,想要通过我的手机与之通信。
通信本身通过IsoDep没有问题,但我不知道如何获取ATR。
据我所知,意图应该包含ATR,请问有人知道我需要的代码吗?
如果不可能的话,也许有人知道如何通过像SELECT这样的命令进行热重置,其中答案是ATR。
非接触式卡片没有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();
...
NfcA
)。对于Type B标签(NfcB
),您可能需要调查getHiLayerResponse()
。非接触式卡片确实会返回ATR。然而,您无法从当前的Android NFC API中获取ATR。Android NFC API仅返回ATR的历史字节。
非接触式卡片返回ATR的原因: 请注意,ATR是7816复位响应。读卡器(在这种情况下是NFC手机)使用ISO 7816(T = CL)APDU交换与智能卡通信,该交换通过非接触式接口ISO 14443-4传输。由于在此情况下存在ISO 7816,因此您将获得ATR。
getHiLayerResponse()
的数据来源)。 - Michael Roland