我刚刚开始制作一个使用主机卡模拟(HCE)的应用程序,我做了各种各样的工作。我需要该应用程序使手机的行为像一张卡,而另一部手机的行为像一个NFC阅读器,并扫描它,反之亦然,以便交换一个非常小的信息-身份证号码。
我已经完成了一些功能单元,如ProcessDirecdApdu和定义AID,但我并不真正理解它是如何工作的。
这是我目前的代码。。。
@TargetApi(19)公共类主要活动扩展HostApduService{
@Override
public void onDeactivated(int reason) {
}
@Override
public byte[] processCommandApdu(byte[] commandApdu, Bundle extras) {
String inboundApduDescription;
byte[] responseApdu;
if (Arrays.equals(AID_SELECT_APDU, commandApdu)) {
inboundApduDescription = "Application selected";
Log.i("HCEDEMO", inboundApduDescription);
byte[] answer = new byte[2];
answer[0] = (byte) 0x90;
answer[1] = (byte) 0x00;
responseApdu = answer;
return responseApdu;
}
return commandApdu;
}
private static final byte[] AID_SELECT_APDU = {
(byte) 0x00,
(byte) 0xA4,
(byte) 0x04,
(byte) 0x00,
(byte) 0x07,
(byte) 0xF0, (byte) 0x39, (byte) 0x41, (byte) 0x48, (byte) 0x14, (byte) 0x81, (byte) 0x00,
(byte) 0x00
};
public static void main(String[] args) throws UnsupportedEncodingException {
TerminalFactory terminalFactory = TerminalFactory.getDefault();
try {
for (CardTerminal terminal : terminalFactory.terminals().list()) {
System.out.println(terminal.getName());
try {
Card card = terminal.connect("*");
CardChannel channel = card.getBasicChannel();
System.out.println("SelectAID ");
CommandAPDU command = new CommandAPDU(SelectAID);
ResponseAPDU response = channel.transmit(command);
byte recv[] = response.getBytes();
for (int i = 0; i < recv.length; i++) {
System.out.print(String.format("%02X", recv[i]));
}
System.out.println("");
}
catch (CardException e){}
}
}
catch(CardException e){
}
}
}
public class ReaderActivity {
public static byte[] SelectAID = new byte[]{(byte) 0x00, (byte) 0xA4, (byte) 0x04, (byte) 0x00,
(byte) 0x07,
(byte) 0xF0, (byte) 0x39, (byte) 0x41, (byte) 0x48, (byte) 0x14, (byte) 0x81, (byte) 0x00, (byte)
0x00
};
}
这些字节代表什么,例如0x00,0xA4,以及如何通过APDU传达我自己的信息(身份证号码)?
我还要补充什么?
我的代码基于以下教程https://www.slideshare.net/ChienMingChou/hce-tutorialv-v1
APDU是在ISO 7816标准的第4部分中指定的——在那里你会发现每个字节代表什么(类字节、操作代码、参数字节等)。例如,0xA4
意味着SELECT命令
。
我的建议是去GlobalPlatform网站下载卡片规格——你必须注册,但它是免费的。该卡规范的第11章包含了大量关于APDU编码、最有趣的APDU命令和管理卡的响应等信息。这些信息将帮助您入门,并让您了解可以为应用程序设计哪些APDU命令。
我一直在查看全球平台规范,了解如何为我的应用程序定义APDU,该应用程序将使用主机卡模拟(HCE)。我的应用程序应该有一部手机通过HCE像NFC标签一样工作,另一部手机充当NFC阅读器。我试图在手机之间传输的任意数据只是一个包含ID号的简单字符串,但我不确定如何在代码中应用它。我已经了解了不同字节命令的含义,但我真的不知道如何应用它。 我想我需要使用STORE DATA命令,但我不知道如何直观地执
通过阅读《HCE开发者指南》,这里的《HCE开发者指南》似乎可以将android手机用作阅读器。我把卡片信息放在NFC标签上,然后用手机读。我想让手机充当阅读器。你知道这是否可行吗?我创建了一个示例项目,其中包含以下代码行: 我不知道下一步该去哪里。
translated_page: https://github.com/PX4/Devguide/blob/master/en/simulation/sitl.md translated_sha: b522243efef9deb5e2d3ae7bd03ae9ed0eee3418 Multi-Vehicle Simulation This tutorial explains how to simul
HCE是在Android 4.4中实现的,但是关于如何在模拟卡中写入的信息很少。 我有心肺复苏40.30阅读器 这个读者带来了一些样本NFC卡。我使用NFC读卡应用程序读取这些卡。 与CPR 40.30兼容的NFC卡详细信息 IC制造商:恩智浦半导体 我想写HCE代码,希望我的Android手机像一张卡片一样,可以被CPR 40.30阅读器读取。我假设HCE代码应该模拟具有上述规格的卡,因为读卡器
我正在尝试使用ACR1281U NFC标签阅读器在Android设备上进行主机卡仿真。 这就是我想申请的类型。 根据Android文档和示例,需要在Android项目中注册一个AID: 我如何知道我需要在我的Android应用程序中注册哪些AID,以便读者可以阅读HCE Android应用程序? 这里是我发布的另一个关于同样问题的问题:没有找到支持的卡终端ARC1281U nfc读卡器 我参考了以
我开发了一个系统,可以使用带有PN532芯片的阅读器读取NFC标签。它工作正常。我可以阅读米费尔经典和米费尔超轻标签。 现在我想使用带有Android 4.4.2的Nexus平板电脑来模拟标签。我没有Android开发经验,但我认为这是可能的。 我已经在Nexus平板电脑中设置了NFC通信,但我想我必须下载或编写一些应用程序来模拟Tag和NDEF通信。 最简单的方法是什么?