携帯電話と通信したいEMVスマートカードを入手しました。通信自体はIsoDepを介して問題なく機能しますが、ATRを取得する方法がわかりません。インテントにATRが含まれている必要があることがわかっている限り、必要なコードを誰かに教えてもらえますか?
または、これが不可能な場合は、誰かがSELECTなどのコマンドを使用してカードをウォームリセットする方法を知っている可能性があります。答えはATRです。
非接触型カードにはATRがありません。ただし、ATS(Answer to Select)の履歴バイトに興味があるかもしれません。これらを取得するには、次を呼び出し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();
...
これはISO14443タイプAタグ(NfcA
)でのみ機能することに注意してください。タイプBタグ(NfcB
)の場合、調査することをお勧めしますgetHiLayerResponse()
。
非接触型カードはATRを返します。ただし、現在のandroidNFCAPIからATRを取得することはできません。Android NFC APIは、ATRから履歴バイトのみを返します。
非接触型カードがATRを返す理由:ATRは7816であることに注意してください。リセットに対する回答。リーダー(この場合はnfc電話)は、非接触インターフェースISO14443-4を介して転送されるISO7816(T = CL)APDU交換を使用してスマートカードと通信します。この場合、ISO 7816があるため、ATRを取得します。