我想在两个使用近场通信的安卓应用程序之间实现p2p。
我试过cardemulator (https://github.com/googlesamples/android-CardEmulation)和cardreader (https://github.com/googlesamples/android-CardReader)应用程序。它们工作得很好。
但在本例中,它只将数据从cardemulator发送到cardreader。我也想用另一种方式。
是否可以在apdu命令中发送额外的数据?数据字段现在包含了辅助,如果我更改了这个字段或在辅助之后添加了额外的数据,我的应用程序将偏离路线更改辅助,因此它将不会连接。
我应该用我的数据发送一个额外的apdu命令吗?
还是不能这样做呢?
发布于 2017-01-24 19:42:16
NFC Peer 2 Peer模式与NFC读卡器模式不同。
如果你想在两个安卓应用之间发送数据,你需要安卓光束在Peer 2 Peer模式下运行。
从这里开始阅读一些关于LLCP and SNEP protocols的内容。
基本上,您需要的是使用Android回调方法将NDEFMessage从一个设备发送到另一个设备。
要使用Android光束发送NDEFMessage,您需要实现以下两个接口:
CreateNdefMessageCallback
OnNdefPushCompleteCallback在createNdefMessage()方法中,您必须创建并返回一个要发送的NDEFMessage (here,您可以找到一个描述)。
进入onNdefPushComplete()方法,你可以在NDEFMessage上做一些事情,发送完成。
您需要的是确定哪个设备将充当启动器,然后在createNdefMessage()中,您应该返回一个NDEFMessage以发送给另一个设备。
在接收设备上(在近场通信中命名为目标设备),您应该将NDEFMessage接收到Activity.onNewIntent(Intent intent)中并对其进行管理。
在那之后,你可以在另一边做同样的事情。
理论上,使用SNEP协议,您应该能够发送SNEP GET请求,但在Android上,此功能已被禁用。在这里,您可以阅读有关Android SNEP implementation的讨论
请记住,为了能够接收NDEFMessage,您必须在您的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>希望这能有所帮助
https://stackoverflow.com/questions/41815879
复制相似问题