我正在尝试通过 NFC(即卡模拟模式)向 Nexus 4 发送一些数据。我尝试了许多命令 APDU,例如写入和更新 APDU,但我无法让它们工作。
我想说的是,我想在选择 APDU 命令后向手机发送一些数据(不是 AID)。
提前致谢,
巴德
HCE 模拟卡将准确理解您的 HCE 应用程序的 APDU 服务处理的那些命令。因此,例如,如果您的 HCE 服务的processCommandApdu()
回调方法如下所示:
final static byte[] SW_NO_ERROR = new byte[]{ (byte)0x90, (byte)0x00 };
final static byte[] SW_INCORRECT_P1P2 = new byte[]{ (byte)0x6A, (byte)0x86 };
final static byte[] SW_INS_NOT_SUPPORTED = new byte[]{ (byte)0x6D, (byte)0x00 };
final static byte[] SW_ERR_UNKNOWN = new byte[]{ (byte)0x6F, (byte)0x00 };
@Override
public byte[] processCommandApdu(byte[] apdu, Bundle extras) {
if (apdu.length >= 4) {
if ((apdu[1] == (byte)0xA4) && (apdu[2] == (byte)0x04)) {
// SELECT APPLICATION
return SW_NO_ERROR;
} else if ((apdu[1] == (byte)0xCA) && (apdu[2] == (byte)0x02)) {
// GET DATA (SIMPLE TLV)
switch (apdu[3] & 0x0FF) {
case 0x001:
return new byte[]{ apdu[3], (byte)0x02, (byte)0x01, (byte)0x00, (byte)0x90, (byte)0x00 };
case 0x002:
return new byte[]{ apdu[3], (byte)0x02, (byte)0x12, (byte)0x34, (byte)0x90, (byte)0x00 };
case 0x003:
return new byte[]{ apdu[3], (byte)0x06, (byte)0xAA, (byte)0xBB, (byte)0xCC, (byte)0xDD, (byte)0xEE, (byte)0xFF, (byte)0x90, (byte)0x00 };
default:
return SW_INCORRECT_P1P2;
}
} else {
return SW_INS_NOT_SUPPORTED;
}
}
return SW_ERR_UNKNOWN;
}
您的 HCE 应用程序将理解以下命令 APDU:
选择应用程序(通过援助)
00 A4 04 xx ...
获取数据对象的数据0201
00 CA 02 01 00
获取数据对象的数据0202
00 CA 02 02 00
获取数据对象的数据0203
00 CA 02 03 00
其他命令会导致各种错误。