我使用javax.smartcardio
API使用ACS ACR38USBSAM阅读器开发Javacard应用程序。我在检测是否存在SAM卡时遇到问题。
列出可用的终端产生两个CardTerminal
,ACS ACR38USB 0和ACS ACR38USBSAM 0.这里我试图使用ACS ACR38USBSAM 0终端来检测SAM存在的变化。
CardTerminal terminal = factory.terminals().getTerminal("ACS ACR38USBSAM 0");
terminal.waitForCardPresent(0);
用于检测waitForCardPresent(0)
和waitForCardAbsent(0)
等更改的方法在用于普通卡终端时表现正常,但未正确检测到SAM卡。
waitForCardPresent(0)
时,即使SAM不存在,该方法也会始终返回true
。waitForCardAbsent(0)
时,即使SAM已断开连接,该方法也将始终等待。我还阅读了device's page中的技术规范和参考手册,但我仍然不知道它是否应该是这样的。我认为这是设计的,但我仍然不了解其背后的原因。
我理解在实际使用中很少删除或更改SAM。这本身并不是一个非常关键的要求,但主要是为了方便起见。