1

我有一个 NFC 阅读器 ACS ACR122U,我想从我的 Android 手机向它发送数据。

我发现了很多关于如何以 P2P 模式连接我的两台设备以及如何将数据从手机发送到 ACR122U 的示例,但我的桌面服务器 (ACR122U) 总是收到 SNEP PUT 请求。我会发送一个 GET 请求,但我只能找到使用内置于 NDEF 系统中的 Android 的示例,而无需指定 PUT 或 GET 请求。

如何将 SNEP GET 请求从我的 Android 设备打包并发送到 ACR122U?

4

1 回答 1

2

简短的回答:你不能。

Android API 不允许您实现自定义 LLCP 服务。在 Android 设备上实现的唯一 LLCP 服务是 NFC 论坛默认 SNEP 服务器(服务名称urn:nfc:sn:snep,服务访问点地址 4),以及出于遗留原因,Android NDEF 推送协议(类似于 SNEP,但可以追溯到 SNEP 规范发布之前的时代)发表)。

虽然 SNEP 协议规范定义了一个 GET 请求以从另一个设备提取 NDEF 消息,但 NFC 论坛默认 SNEP 服务器被定义为仅接受 PUT 请求。该 SNEP 服务器必须拒绝GET 请求。

来自 NFC 论坛简单 NDEF 交换协议技术规范(1.0 版):

默认 SNEP 服务器提供一个逻辑收件箱。连接到默认服务器的客户端可以使用 Put 请求消息将 NDEF 消息放入收件箱。[...]

默认服务器不应接受 Get 请求。获取请求消息的适当响应未实现。

因此,您只能将 NDEF 消息推送到 NFC 论坛默认 SNEP 服务器,反之则不行。

因此,如果要通过点对点的方式向Android设备发送NDEF消息,则需要ACR122U端实现SNEP客户端。然后,您可以让该客户端连接到 Android 设备上的 SNEP 服务器(在 service name 处urn:nfc:sn:snep),并使用 PUT 请求将 NDEF 消息推送到它。

如果想通过点对点的方式接收Android设备的NDEF消息,需要ACR122U侧实现SNEP服务器。然后,Android SNEP 客户端将连接到您的 SNEP 服务器,并NfcAdapter.setNdefPushMessage()再次使用 PUT 请求将等待的 NDEF 消息(例如通过 注册)推送给它。

于 2017-01-02T08:26:16.993 回答