我想在我的 Android 应用和支持 NFC 的信息亭之间实现 NFC 通信。我已阅读文档,并且了解推送数据可以通过两种方式完成:
- 通过前台 NDEF 推送 API 级别 10 到 13
- 通过 API 级别 14 的 Android Beam
我想我可以通过第一个解决方案做我想做的事,但我想知道是否可以在 Android 设备和非 Android 设备之间使用 Android Beam?
谢谢你的帮助,
罗曼
我想在我的 Android 应用和支持 NFC 的信息亭之间实现 NFC 通信。我已阅读文档,并且了解推送数据可以通过两种方式完成:
我想我可以通过第一个解决方案做我想做的事,但我想知道是否可以在 Android 设备和非 Android 设备之间使用 Android Beam?
谢谢你的帮助,
罗曼
虽然 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 操作有 3 种模式{卡读/写、标签仿真和 P2P 通信}。Android 支持 Card 读/写和 P2P 通信。
通过 P2P 与非 Android 设备进行通信非常复杂,因为您必须使用基于 LLCP(逻辑链路控制协议)构建的 NPP(Ndef 推送协议)。您的非 android 平台需要实现 LLCP 才能进行通信。我不确定这是否已经为 NFC 完成。可在此处找到有关 NPP/LLCP 实施的信息
下一种方法是使用卡读/写模式与运行在卡模拟模式下的非 Android 设备进行通信。通过这种方式,您可以将 APDU 发送到仿真标签以发送和接收数据。我在我的项目中使用 BlackBerry 反向执行了这种方法。黑莓支持卡模拟,所以我使用非 Android 设备 (ACR122U) 将 APDU 发送到黑莓。
虽然第一种方法 (P2P) 显然是理想的方法,但第二种方法可能更容易实施。无论如何,它在我的应用程序中运行良好,我创建了一个通过 NFC 接受付款的系统。
请注意,ACR122U 对 NFC 标签仿真没有很好的支持,因此不适合您。LibNFC网站是寻找支持标签仿真的设备的良好开端。
我现在完成了这个项目,使用 ACR122U 设备效果很好。如果您在第二种方法上需要任何帮助,请询问。
请参阅以下问题 28014:启用真正的 NFC p2p 通信和禁用“Touch to Beam”UI 的选项
https://code.google.com/p/android/issues/detail?id=28014
Android Peer to Peer 不起作用一点也不。