android - 使用 Nexus 5 在 Android(4.4/KitKat 及更高版本)上模拟主机卡

标签 android nfc apdu hce android-beam

根据 this document,我正在尝试用我的 Nexus 5 模拟 NFC 标签,但我的服务永远不会被调用。 我应该关闭 Android Beam 吗?

我想模拟一个包含 url 的简单标签。

读取器是 Nexus 7 (2012),我发现这个过程就像在 Nexus 7 上使用 Android beam 简单扫描 NFC 标签。

此外,我对 aid-filter 名称有点困惑。有他们的名单吗?

我确定我不明白什么。 谢谢

最佳答案

首先(尽管这不能直接回答您的问题),在两个 Android NFC 设备之间传输 URL 的首选方法是使用 Android Beam(点对点模式)。 Android HCE(主机卡仿真)通常用于仿真非接触式智能卡应用程序, NFC 标签除外。

我是否需要关闭 Android Beam 才能使用 Android HCE?

不,Android HCE 不受 Android Beam 开/关设置的影响。实际上,即使 Beam 关​​闭,Android NFC 设备仍会执行点对点模式链接激活。

我想模拟一个包含 URL 的简单标签。

Android HCE 模拟基于 ISO/IEC 14443-4 和 ISO/IEC 7816-4 的智能卡应用程序。因此,如果您想以此模拟 NFC 标签,则需要在您的 Android HCE 服务中实现 NFC 论坛的 Type 4 标签操作规范。 NFC 论坛的规范可在其 website 上免费获得。 .

总结本规范的要求:

  1. 您需要为 NFC Forum Type 4 标签应用程序 AID 注册您的服务:D2760000850101
  2. 您的服务需要用状态代码成功 (0x9000) 响应该 AID 的 SELECT(按 DF 名称)APDU:

    > 00 A4 04 00 07 D2760000850101 00
    < 9000
    
  3. 您的服务需要使用状态代码成功响应功能容器 (CC) 文件 (E103) 的 SELECT(按 EF ID)APDU:

    > 00 A4 00 0C 02 E103
    < 9000
    
  4. 您的服务需要在收到 READ BINARY APDU(在选择 CC 文件之后)时使用 CC(或其部分)进行响应:

    > 00 B0 Offset_High Offset_Low Length
    < <Length bytes of the CC starting at Offset> 9000
    
  5. 您的服务需要以状态代码成功响应 NDEF 文件(在 CC 中定义的 EF ID)的 SELECT(通过 EF ID)APDU:

    > 00 A4 00 0C 02 <EF ID>
    < 9000
    
  6. 您的服务需要在收到 READ BINARY APDU 时(在选择 NDEF 文件之后)以 NDEF 文件内容(或其部分)作为响应:

    > 00 B0 Offset_High Offset_Low Length
    < <Length bytes of the NDEF file starting at Offset> 9000
    

我想要第二台 Android 设备自动获取 URL。

这是有问题的部分,也是 Beam 成为首选方法的原因。即使您用一台 Android 设备模拟 NFC Forum Type 4 标签,将两台 Android 设备放在一起仍然会导致它们建立点对点链接(即使 Beam 已关闭!)。因此,第二个 Android 设备不会将您的 HCE 仿真卡检测为 NFC 标签。克服此限制的唯一方法是在第二个设备上使用 NFC Reader 模式 API(Android 4.4 中的新功能)。但是,在这种情况下,您需要在接收设备上安装一个在前台处于 Activity 状态的应用程序(这是启用阅读器模式 API 的唯一方法)。

关于android - 使用 Nexus 5 在 Android(4.4/KitKat 及更高版本)上模拟主机卡,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23155719/

相关文章:

android - Android O中如何显示来自后台服务的推送通知//如何正确使用startForeground()

java - WebView android不允许全屏

android - 我如何使用 ADT 在我的笔记本电脑上测试 Android HCE?

smartcard - 从 EMV 的 CVM 列表中解析 CV 规则

android - 动态显示来自资源/可绘制的图像

android - AlertDialog 与 builder.setSingleChoiceItems。禁用项目

javacard - UICC : How to change ARA?

apdu - 如何在不 root 设备的情况下交换 APDU?

javascript - 了解 NDEF 记录格式

android - 从 Google 的示例代码中获取 createMime is undefined for type beamActivity 错误