TagLostException IsoDep Android Java卡

时间:2014-01-08 06:21:46

标签: java android nfc apdu

我正在使用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的智能卡读卡器。

1 个答案:

答案 0 :(得分:0)

尝试在APDU末尾添加“00”。有时需要这样做。不要从'40'修改'LC' - 只需添加零字节。我认为这在T = CL或T = 1时是必需的。