我在两个Android设备上有两个应用程序,类似于NFC样本中的CardEmulation和CardReader。
我想将数据从运行在一台Android设备上的主机卡仿真应用程序发送到第二台Android设备上运行的阅读器应用程序。当两个应用程序都在前台打开时,这都有效。
但如果我关闭阅读器应用程序,我将无法再向其发送数据。相反,当两部手机连在一起时,它们会激活光束传输。但是,当两部手机放在一起时,我想让阅读器手机自动启动阅读器应用程序。
所以问题是:
我可以从HCE应用程序发送数据,以便当设备彼此靠近时,阅读器会收到TECH_DISCOVERED
意图吗? (我们不希望梁模式的附加接受点击。)
如果无法做到,HostApduService
是否可以发送数据以便读者获得NDEF_DISCOVERED
意图?
答案 0 :(得分:4)
不幸的是,这是不可能的。由于Android NFC堆栈实现对其他NFC设备(点对点模式和NFC标签)的轮询,因此无法通过基于主机的卡仿真(HCE)应用程序在一台Android设备上启动读取器应用程序。另一个Android设备。
默认情况下,Android NFC堆栈会轮询NFC标签和NFC对等设备。因此,当两个Android设备连在一起时,它们将通过NFC点对点模式和不通过读写器模式+卡模拟模式自动通信。
因此,"读者"设备无法检测到第二台设备上运行的HostApduService
。因此,Android设备无法模拟会触发应用程序(过滤NDEF_DISCOVERED
意图甚至TECH_DISCOVERED
或TAG_DISCOVERED
意图)的NFC标记(包含NDEF消息)第二个Android设备。
在第二台Android设备上,在一台Android设备(即读卡器/写卡器模式)和HCE应用程序(HostApduService
)之间进行通信的唯一方法是使用reader mode API)。这禁用了对等轮询,因此允许读取器Android设备发现其他设备的卡仿真模式。但是,为了使用此API,您的应用程序必须已在阅读器设备上运行前台活动。
请注意,禁用Android Beam(通过“设置”应用)不会禁用点对点模式。所以这样做不会改变任何事情。