android - 具有封闭读卡器应用程序的 NFC 卡模拟

标签 android android-intent nfc hce nfc-p2p

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

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

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

所以问题是:

  1. 我可以从 HCE 应用发送数据,以便在设备彼此靠近时阅读器收到 TECH_DISCOVERED Intent 吗? (我们不希望对 Beam 模式进行额外的接受点击。)

  2. 如果不可能,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_DISCOVEREDTAG_DISCOVERED Intent )在第二台 Android 设备上。

一台 Android 设备(处于读取器/写入器模式)与第二台 Android 设备上的 HCE 应用程序 (HostApduService) 之间进行通信的唯一方法是使用 reader mode API )。这会禁用点对点轮询,从而允许读卡器 Android 设备发现其他设备的卡模拟模式。但是,为了使用此 API,您的应用程序必须已在读取器设备上运行前台 Activity 。

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

关于android - 具有封闭读卡器应用程序的 NFC 卡模拟,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37188472/

相关文章:

android - 由于 google play 服务,Gradle 构建失败

android - Android Studio 中声明的权限在哪里?

Android 电子邮件与 MMS 原始附件?

linux - debian 中未安装 libudev-dev

android - Firebase实时数据库数组查询问题

java - 如何删除支持库 (appcompat_v7) [Eclipse]

android - 如何将联系人姓名和电话号码发送到MySQL数据库?

android - 如何将文本从 Activity 发送到 WallpaperService 类

Android:将多个 NDEF 消息放在一个 NFC 标签中?

nfc - PWA 可以在 2019 年访问 android 的 NFC 功能吗?