简短的回答:你不能。
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 消息(例如通过 注册)推送给它。