我正在製作使用ISO-DEP(ISO 14443-4)作爲TagTechnology的NFC應用程序。 我嘗試使用DESFire EV1執行身份驗證。Android IsoDep命令鏈接失敗
如果命令的鏈接沒有暫停,則認證可以很好地工作。 (如NATIVE_AUTHENTICATION_COMMAND_P1之後的Thread.Sleep)我在卡片的驗證命令部分2中得到錯誤0x911C(「命令代碼不支持」)。 當驗證已被取消時,通常會出現錯誤。就像在認證過程中卡片沒有任何關於它的另一個命令一樣。
問題是我的應用程序沒有做其他任何事情發送selectApplication,驗證第1部分,睡眠和第2部分。 我已經在C++中使用PCSC讀取器嘗試相同的代碼,睡眠不是問題,甚至5秒睡眠認證在我的電腦上有效。 因此,我想知道即使在嚮應用程序提供Intent之後,或者如果幀等待時間(ISO 14443-4)不起作用或NDEF「拉」破壞了身份驗證,Android是否正在使用該卡「玩」。 。
(NATIVE_AUTHENTICATION_COMMAND_P2的值是一個爲例)
final byte[] NATIVE_AUTHENTICATION_COMMAND_P1 = new byte[]{(byte)0x90, (byte)0x0A, (byte)0x00, (byte)0x00, (byte)0x01, (byte)0x00, (byte)0x00};
final byte[] NATIVE_AUTHENTICATION_COMMAND_P2 = new byte[]{(byte)0x90, (byte)0xAF, (byte)0x00, (byte)0x00, (byte)0x10, (byte)0xAB, (byte)0xB4, (byte)0x66, (byte)0xA4, (byte)0xE9, (byte)0x99, (byte)0xFF, (byte)0x5C, (byte)0xD7, (byte)0xF3, (byte)0xA7, (byte)0x81, (byte)0x62, (byte)0x2F, (byte)0xFA, (byte)0x16, (byte)0x00};
final byte[] NATIVE_SELECT_COMMAND = new byte[]{(byte)0x90,(byte)0x5A,(byte)0x00,(byte)0x00,(byte)0x03,(byte)0x00,(byte)0x00,(byte)0x00,(byte)0x00};
IsoDep tag = IsoDep.get(tagFromIntent);
tag.connect();
byte[] result;
result = tag.transceive(NATIVE_SELECT_COMMAND); //SUCCESS
result = tag.transceive(NATIVE_AUTHENTICATION_COMMAND_P1); //SUCCESS
// Thread.sleep(1000);
result = tag.transceive(NATIVE_AUTHENTICATION_COMMAND_P2); //result = 0x90AE without Sleep and with Sleep 0x911C ("Command code not supported")
tag.close();
如果有人有一個想法,因爲我完全失去了:)
UPDATE: 邁克爾 - 羅蘭的幫助後,並他的提示;我已經使用NDEF檢查禁用和延遲存在檢查的讀取器模式API到10秒,以使我的鏈接命令完美工作!
@Override
protected void onResume() {
super.onResume();
Bundle options = new Bundle();
options.putInt(NfcAdapter.EXTRA_READER_PRESENCE_CHECK_DELAY, 10000);
mAdapter.enableReaderMode(this, this, NfcAdapter.FLAG_READER_NFC_A | NfcAdapter.FLAG_READER_SKIP_NDEF_CHECK, options);
}
@Override
public void onPause() {
super.onPause();
mAdapter.disableReaderMode(this);
}
你使用什麼設備?我想用Broadcom的NFC芯片組,對吧? –
我通常使用Nexus 4,它是Broadcom的BCM20793S。 – Liryna