具有封闭式阅读器应用的NFC卡仿真

时间:2016-05-12 13:31:11

标签: android android-intent nfc hce nfc-p2p

我在两个Android设备上有两个应用程序,类似于NFC样本中的CardEmulation和CardReader。

我想将数据从运行在一台Android设备上的主机卡仿真应用程序发送到第二台Android设备上运行的阅读器应用程序。当两个应用程序都在前台打开时,这都有效。

但如果我关闭阅读器应用程序,我将无法再向其发送数据。相反,当两部手机连在一起时,它们会激活光束传输。但是,当两部手机放在一起时,我想让阅读器手机自动启动阅读器应用程序。

所以问题是:

  1. 我可以从HCE应用程序发送数据,以便当设备彼此靠近时,阅读器会收到TECH_DISCOVERED意图吗? (我们不希望梁模式的附加接受点击。)

  2. 如果无法做到,HostApduService是否可以发送数据以便读者获得NDEF_DISCOVERED意图?

1 个答案:

答案 0 :(得分:4)

不幸的是,这是不可能的。由于Android NFC堆栈实现对其他NFC设备(点对点模式和NFC标签)的轮询,因此无法通过基于主机的卡仿真(HCE)应用程序在一台Android设备上启动读取器应用程序。另一个Android设备。

默认情况下,Android NFC堆栈会轮询NFC标签和NFC对等设备。因此,当两个Android设备连在一起时,它们将通过NFC点对点模式和通过读写器模式+卡模拟模式自动通信。

因此,"读者"设备无法检测到第二台设备上运行的HostApduService。因此,Android设备无法模拟会触发应用程序(过滤NDEF_DISCOVERED意图甚至TECH_DISCOVEREDTAG_DISCOVERED意图)的NFC标记(包含NDEF消息)第二个Android设备。

在第二台Android设备上,在一台Android设备(即读卡器/写卡器模式)和HCE应用程序(HostApduService)之间进行通信的唯一方法是使用reader mode API)。这禁用了对等轮询,因此允许读取器Android设备发现其他设备的卡仿真模式。但是,为了使用此API,您的应用程序必须已在阅读器设备上运行前台活动。

请注意,禁用Android Beam(通过“设置”应用)不会禁用点对点模式。所以这样做不会改变任何事情。