【问题标题】:Android nfc send message to to and from HCE?Android nfc 向 HCE 发送消息和从 HCE 发送消息?
【发布时间】:2017-01-23 21:22:16
【问题描述】:

我想使用 NFC 在两个 android 应用之间实现 p2p。

我已经尝试了 cardemulator (https://github.com/googlesamples/android-CardEmulation) 和 cardreader (https://github.com/googlesamples/android-CardReader) 应用程序。他们工作正常。

但在本例中,它只是将数据从 cardemulator 发送到 cardreader。 我也想换一种方式。

是否可以在 apdu 命令中发送额外的数据? 数据字段现在包含辅助,如果我更改此选项或在辅助后添加额外数据,我的应用程序将不正确地更改辅助,因此它不会连接。

我应该用我的数据发送一个额外的 apdu 命令吗?

还是不能这样做?

【问题讨论】:

  • 你用同样的方法解决了吗?
  • 什么意思??我没解决。现在我只能向一个方向发送(通过读取模拟卡)。
  • 我知道您已经尝试并找到了使用 apdu 命令的解决方案,如果有请告诉我

标签: android nfc nfc-p2p android-beam


【解决方案1】:

NFC Peer 2 Peer 模式与 NFC 读卡器模式不同。

如果您想在两个 Android App 之间发送数据,您需要 Android Beam 在 Peer 2 Peer 模式下运行。

从这里开始阅读一些关于LLCP and SNEP protocols的内容。

基本上,您需要使用 Android 回调方法将NDEFMessage 从一台设备发送到另一台设备。

要使用 Android Beam 发送NDEFMessage,您需要实现以下两个接口:

CreateNdefMessageCallback
OnNdefPushCompleteCallback

进入createNdefMessage()方法你必须创建并返回一个NDEFMessage发送(here你可以找到一个描述)。

进入onNdefPushComplete()方法你可以在NDEFMessage发送完成时做一些事情。

您需要确定哪个设备将充当发起者,然后在 createNdefMessage() 中您应该返回一个 NDEFMessage 以发送到其他设备。

在接收设备(在名为目标设备的 NFC 中)上,您应该将 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>

检查这个Android Beam Example

希望有帮助

【讨论】:

  • 我知道,但我不想使用 Android Beam。因此可以与阅读器进行交互,而无需按下屏幕。这就是我看安卓阅读器和 HCE 的原因。
  • @Han 必须这样做吗?不使用 Android Beam 发送数据。我很困惑,不知道该怎么做。因为 Android 10 弃用了用于 NDEF 消息传输的 Android Beam。