我正在使用一张使用安卓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的智能卡读卡器上也是如此。
发布于 2014-01-08 15:33:33
尝试在APDU的末尾添加'00‘。这有时是必需的。不要修改'40‘中的'LC’-只需添加零字节即可。我认为这在T=CL或T=1中是必需的。
https://stackoverflow.com/questions/20988355
复制相似问题