如何检测传入命令的接口?

How to detect interface of incoming command?

我有一个包含我的小程序的双界面 Java 卡。我想对来自不同接口的单个​​命令有两个不同的 APDU 响应。

例如,当从接触式接口接收到命令时,我想用 "Contact" 响应 00 10 00 00 APDU 命令,当从非接触式接口接收到该命令时,我想响应 "ContactLess" .

那么,Java Card API 或 Global Platform API 中是否有任何方法来检测传入命令的接口?

javacard.framework.APDUclass中有一个叫做getProtocol()的方法:

public static byte getProtocol()

Returns the ISO 7816 transport protocol type, T=1 or T=0 in the low nibble and the transport media in the upper nibble in use.

接口在返回字节的高半字节中编码:

final byte transportMedia = (byte) (APDU.getProtocol() & APDU.PROTOCOL_MEDIA_MASK); 
final boolean isContactless = (transportMedia == APDU.PROTOCOL_MEDIA_CONTACTLESS_TYPE_A) || 
         (transportMedia == APDU.PROTOCOL_MEDIA_CONTACTLESS_TYPE_B);