我在两台 Android 设备上有两个应用程序,类似于 NFC 示例中的 CardEmulation 和 CardReader。
我想将数据从一台 Android 设备上运行的主机卡模拟应用程序发送到第二台 Android 设备上运行的读卡器应用程序。当两个应用程序都在前台打开时,此功能有效。
但是如果我关闭阅读器应用程序,我将无法再向其发送数据。相反,当两部手机握在一起时,它们会激活 Beam 传输。但是,我希望当两部手机放在一起时,阅读器手机自动启动阅读器应用程序。
所以问题是:
我可以从 HCE 应用发送数据,以便在设备彼此靠近时阅读器收到
TECH_DISCOVERED
Intent 吗? (我们不希望对 Beam 模式进行额外的接受点击。)如果不可能,
HostApduService
是否可以发送数据以便读取器接收NDEF_DISCOVERED
Intent ?
最佳答案
不幸的是,这是不可能的。由于 Android NFC 堆栈实现对其他 NFC 设备(点对点模式和 NFC 标签)轮询的方式,无法通过基于主机的卡模拟 (HCE) 应用程序在一台 Android 设备上启动读卡器应用程序。另一台 Android 设备。
Android NFC 堆栈默认轮询 NFC 标签和 NFC 对等设备。因此,当两个 Android 设备放在一起时,它们将自动通过 NFC 点对点模式进行通信,而不是通过读写器模式 + 卡模拟模式进行通信。
因此,“读取器”设备无法检测到第二个设备上运行的 HostApduService
。因此,Android 设备无法模拟 NFC 标签(包含 NDEF 消息)来触发应用程序(过滤 NDEF_DISCOVERED
Intent ,甚至是 TECH_DISCOVERED
或 TAG_DISCOVERED
Intent )在第二台 Android 设备上。
一台 Android 设备(处于读取器/写入器模式)与第二台 Android 设备上的 HCE 应用程序 (HostApduService
) 之间进行通信的唯一方法是使用 reader mode API )。这会禁用点对点轮询,从而允许读卡器 Android 设备发现其他设备的卡模拟模式。但是,为了使用此 API,您的应用程序必须已在读取器设备上运行前台 Activity 。
请注意,禁用 Android Beam(通过“设置”应用)不会禁用点对点模式。所以这样做不会改变任何事情。
关于android - 具有封闭读卡器应用程序的 NFC 卡模拟,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37188472/