gpt4 book ai didi

android - 安卓应用与ACR122U卡仿真交互

转载 作者:行者123 更新时间:2023-11-29 21:03:05 26 4
gpt4 key购买 nike

我的 ACR122U 处于卡模拟模式,Android 应用程序必须在检测到模拟标签时启动并发送消息,例如:“Hello”。

当模拟标签并用我的手机扫描它时,它通过使用 android.nfc.action.TAG_DISCOVERED intent 过滤器捕获它成功打开了应用程序。

对于这种情况,我有三个问题。

问题一

我读到 TAG_DISCOVERED 的优先级最低,您无法确定在标签发现后您的应用程序是否会被选中。使用卡片模拟是使用 android.nfc.action.TAG_DISCOVERED Intent 过滤器捕获 Intent 的唯一方法,还是有其他(更好的)方法?

问题二

我认为这个问题与问题 1 有关。当我在 PN532 上使用 tgSetData 命令时,我想我只是将纯文本发送到 android 设备。例如:FF 00 00 00 08 D4 8E 61 73 64 61 73 64 发送字符串“asdasd”。在卡仿真中是否也可以发送 NDEF 消息或类似的消息?我想如果这可能的话,问题 1 已经得到回答,因为您可以使用 NDEF Intent 过滤器。

问题三

这个问题是关于应用选择部分的。从第一个 tgGetData 我收到字节 00 a4 04 00 07 d2 76 00 00 85 01 00。我读到这是应用程序选择。我还注意到在打开 Android 应用程序时不会获得此过程。我猜那可能是因为应用程序是在前面打开的。但是,当我的应用程序不在最前面时,我如何与此响应交互?我目前的互动是这样的:

  • 获取数据 D4 86
  • 响应 = D5 87 00 00 A4 04 00 07 D2 76 00 00 85 01 01 00
  • setData D4 8E 61 73 64 61 73 64(只是一个随机字符串)
  • 响应 = D5 8F 00 90 00
  • 使用 send-/getData 传输数据。

当应用程序不是开放式时,这不起作用。这是因为这个过程是错误的还是我在 Android 中的处理是错误的?

欢迎提供与问题相关的任何信息。

非常感谢!

问候。

最佳答案

问题一

在前台调度中使用 TAG_DISCOVERED 非常好。在这种情况下,您的 Activity 优先于其他应用,TAG_DISCOVERED 是一个简单的包罗万象的机制。

但是,您通常应该在您的 list 中使用TAG_DISCOVERED 作为 Intent 过滤器。在那种情况下,TAG_DISCOVERED 充当回退并仅捕获未被任何其他应用程序的 Intent 过滤器处理的标签。 (实际上 TAG_DISCOVERED 是为了向后兼容非常有限的第一代 Android NFC API。)

在这种情况下,您可以将 TECH_DISCOVERED Intent 过滤器与 NfcA 或/和 IsoDep 的技术过滤器文件结合使用。 (ACR122U 将在 IOS/IEC 14443 Type A(= NfcA)之上模拟 ISO/IEC 14443-4 卡(= IsoDep)。)

问题二

发送 NDEF 消息并不是那么容易,但是使用您的模拟标签作为 NFC 标签(包含 NDEF 消息)可以完成。 ACR122U 模拟 ISO/IEC 14443-4 标签。因此,您需要在标签端实现 NFC 论坛 4 类标签操作规范,以便将模拟标签用作包含 NDEF 消息的 NFC 论坛 4 类标签。查看NFC Forum's freely available specifications了解更多详情。您可能还想看看 ISO/IEC 7816-4,它定义了基于 APDU 的协议(protocol)和在 ISO-DEP 传输协议(protocol)上使用的应用程序结构。

一旦你实现了这样的标签,你当然可以使用 NDEF_DISCOVERED Intent 过滤器。

问题三

请参阅 ISO/IEC 7816-4,了解 APDU 和智能卡应用程序结构的工作原理。您从 Android 设备收到的命令

00 A4 04 00 07 D2 76 00 00 85 01 01 00

是 NFC 论坛 4 类标签应用程序(版本 1.1)的 SELECT 命令。 Android 设备会自动发出该命令(通常还有一些其他命令,请参阅 NFC 论坛 Type 4 标签操作规范)以检查标签是否包含 NDEF 消息。当您收到这样的命令时,您应该根据 ISO/IEC 7816-4 使用适当的状态代码进行回答(例如 6A82,这意味着未找到文件或应用程序)。

虽然通过 ISO-DEP 传输非标准(即非 ISO/IEC 7816-4)帧(如您的情况下的纯 ASCII 文本)有效,但我强烈建议遵守 ISO/IEC 7816-4 以便工作在 Android 设备上流畅运行。

关于android - 安卓应用与ACR122U卡仿真交互,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25415219/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com