我希望在我的Android应用程序和启用NFC的亭子之间实现NFC通信。我已经阅读了文档,并且了解可以通过以下两种方式之一来推送数据:
- 针对API级别10到13的前台NDEF推送
- 从API级别14开始使用Android Beam
我认为我可以通过第一种解决方案做到我想要的事情,但我想知道是否可以在Android设备和非Android设备之间使用Android Beam?
谢谢您的帮助,
Romain
我希望在我的Android应用程序和启用NFC的亭子之间实现NFC通信。我已经阅读了文档,并且了解可以通过以下两种方式之一来推送数据:
我认为我可以通过第一种解决方案做到我想要的事情,但我想知道是否可以在Android设备和非Android设备之间使用Android Beam?
谢谢您的帮助,
Romain
虽然 API 10 到 13 和 API 14 之间的函数调用有所不同,但实际底层协议几乎相同。在这两种情况下,NFC 点对点通信都使用 LLCP。在 API 10 到 13 中,使用的实际数据传输协议是 NPP。在 API 14 中,添加了 SNEP,但当其他设备不支持 SNEP 时,它会回退到 NPP。
因此,当您的非 Android 设备通过 LLCP 实现 SNEP 和/或 NPP 时,它可以与 Android NFC 设备进行数据传输和接收。存在多个面向读卡器设备的 SNEP 和 LLCP 实现,例如请参见https://github.com/grundid/nfctools。
我为一份大学项目研究了这个问题。
首先请注意,NFC有三种操作模式{卡读/写、标签仿真和P2P通信}。Android支持卡读/写和P2P通信。
通过P2P与非Android设备通信相当复杂,因为你必须使用建立在LLCP(逻辑链路控制协议)上的NPP(Ndef推送协议)。你的非Android平台需要实现LLCP以使通信变得可能。我不确定NFC是否已经完成了这项工作。可以在此处找到关于NPP /LLCP实现的信息here
下一个方法是使用读/写模式与运行在卡仿真模式下的非Android设备进行通信。通过这种方式,你可以向仿真标签发送APDU以发送和接收数据。我在我的项目中使用BlackBerry反向采取了这种方法。BlackBerry支持卡仿真,因此我使用了非Android设备(ACR122U)向BlackBerry发送APDU。
虽然第一种方法(P2P)显然是理想的方法,但第二种方法可能更容易实现。无论如何,对我来说它在我的应用程序中运作得非常好,我创建了一个通过NFC接受支付的系统。
请注意,ACR122U不支持NFC标签仿真,因此不适合你。可以在LibNFC网站上找到支持标签仿真的设备。
我现在已经完成了这个项目,使用ACR122U设备效果很好。如果需要第二种方法的任何帮助,请提问。