我正在使用Android IsoDep使用Java卡。我已经将超时设置为50000毫秒。我还计算了NFC连接打开的持续时间,刚刚超过6秒 我把卡放在我的桌子上,把我的手机放在它上面,我没有通过这个过程触摸,所以卡片不可能被物理移除。
知道为什么会这样吗?
我的代码:
try {
if (nfc.isConnected()) {
DLog.w(TAG, "exchange() - connected");
byte[] resp = nfc.transceive(apdu);
// ...
} else {
// ...
close();
}
} catch (TagLostException e) {
DLog.e(TAG, "card was removed", e);
close();
// ...
}
catch (IOException e) {
close();
// ...
}
例外:
01-08 09:54:54.721: E/IsoDepSecureHandler(11221): android.nfc.TagLostException: Tag was lost.
01-08 09:54:54.721: E/IsoDepSecureHandler(11221): at android.nfc.TransceiveResult.getResponseOrThrow(TransceiveResult.java:48)
01-08 09:54:54.721: E/IsoDepSecureHandler(11221): at android.nfc.tech.BasicTagTechnology.transceive(BasicTagTechnology.java:151)
01-08 09:54:54.721: E/IsoDepSecureHandler(11221): at android.nfc.tech.IsoDep.transceive(IsoDep.java:172)
无法执行的特定命令是80460000400000271020363630303030303030353138323133303134333666383639383063022b100141000100000000000000000036364ed930284231adbc6c525e9f0abd
然而,当我使用连接到手机的非接触式读卡器时,同样的命令执行得很好。请注意,只要我不重复该过程并生成新的安全参数(在此之前将某些其他APDU命令发送到卡),该命令才能执行。一旦新的安全参数生成,上述命令就不再起作用了;因此,6982
将被退回。
tbellenger建议在命令末尾添加00
,但这不起作用,即使返回了6985
的智能卡读卡器。
答案 0 :(得分:0)
尝试在APDU末尾添加“00”。有时需要这样做。不要从'40'修改'LC' - 只需添加零字节。我认为这在T = CL或T = 1时是必需的。