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

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

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

最佳答案

简短的回答:不能。

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

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

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


  默认的SNEP服务器提供逻辑收件箱。连接到默认服务器的客户端可以使用“放置请求”消息将NDEF消息放入收件箱。 [...]
  
  默认服务器将不接受Get请求。获取请求消息的适当响应未实现。


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

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

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

10-08 18:18