我想使用NFC在两个Android应用程序之间实现p2p。
我尝试了cardemulator(https://github.com/googlesamples/android-CardEmulation)和读卡器(https://github.com/googlesamples/android-CardReader)应用。他们工作得很好。
但是在这个例子中,它只将数据从cardemulator发送到读卡器。 我也想做另一种方式。
是否可以在apdu命令中发送额外数据? 数据字段现在包含帮助,如果我更改此项或在辅助后添加额外数据,我的应用程序将偏离当然更改辅助,因此它将无法连接。
我应该用我的数据发送额外的apdu命令吗?
还是不可能这样做?
答案 0 :(得分:0)
NFC Peer 2 Peer模式与NFC读卡器模式不同。
如果您想在两个Android应用程序之间发送数据,则需要Android Beam才能在对等2对等模式下运行。
从这里开始阅读一些关于LLCP
and SNEP
protocols的内容。
您基本上需要的是使用Android回调方法将NDEFMessage
从一台设备发送到另一台设备。
要使用Android Beam发送NDEFMessage
,您需要实现这两个接口:
CreateNdefMessageCallback
OnNdefPushCompleteCallback
进入createNdefMessage()
方法,您必须创建并返回NDEFMessage
发送(here,您可以找到说明)。
使用onNdefPushComplete()
方法,您可以在NDEFMessage
发送完成后执行操作。
您需要确定哪个设备将充当启动器,然后进入createNdefMessage()
您应该返回NDEFMessage以发送到其他设备。
在接收设备上(在名为Target设备的NFC中),您应该NDEFMessage
收到Activity.onNewIntent(Intent intent)
并管理它。
之后你可以在另一边做同样的事情。
理论上使用SNEP协议,您应该能够发送SNEP GET请求,但在Android上,此功能已被禁用。在这里,您可以阅读有关Android SNEP implementation
的讨论请记住,为了能够接收NDEFMessage,您必须在youm manifest.xml中定义一个IntentFilter,指定您的活动必须“拦截”哪个NDEFMessage。这是捕获AndroidApplicationRecord NDEFMessage的示例:
<intent-filter>
<action android:name="android.nfc.action.NDEF_DISCOVERED" />
<category android:name="android.intent.category.DEFAULT" />
<data android:mimeType="application/com.example.android.beam" />
</intent-filter>
希望有所帮助