如何读取已附加到设备的 NFC 标签
How to read an NFC tag which is already attached to the device
我的要求是读取已附加到设备的 NFC 标签。
我在申请中观察到以下情况:
NFC 标签已附加到设备,NFC 已关闭。然后当我启动我的 Android 应用程序时,它会要求打开 NFC,并且在打开 NFC 后,我的应用程序将读取已附加到设备的 NFC 标签。
NFC 标签已附加到设备并且 NFC 已打开。当我手动启动我的应用程序时,它不会检测到 NFC 标签。
为什么在后一种情况下应用程序没有检测到NFC标签?有没有什么方法可以检测和读取在应用程序启动之前(手动)已经附加到设备上的标签?
一般来说这是不可能的。 Android 仅在新发现标签(即标签刚刚被点击)时才将标签分派给应用。因此,当应用程序启动时,应用程序无法访问已经在 NFC 区域中的标签 reader。
由于 Android NFC API 不允许在应用程序内禁用和重新启用 NFC 功能(这只能通过“设置”应用程序完成),它也不允许可以暂时禁用 NFC reader 以欺骗 Android 将标签检测为刚被点击。
然而,在 Android 版本 >= 4.4 和 < 5.1(或者是 < 6.0?)NFC reader 模式的实现中存在错误(未记录的功能?) API(enableReaderMode()
导致标签在启用 reader 模式后被重新检测。因此,在这些 Android 版本上,您可以使用 enableReaderMode()
重新发现已经附加的标签。请注意,虽然这在 AOSP 中有效,但某些设备制造商特定的 Android 修改可能不包含此 bug/feature。
我的要求是读取已附加到设备的 NFC 标签。
我在申请中观察到以下情况:
NFC 标签已附加到设备,NFC 已关闭。然后当我启动我的 Android 应用程序时,它会要求打开 NFC,并且在打开 NFC 后,我的应用程序将读取已附加到设备的 NFC 标签。
NFC 标签已附加到设备并且 NFC 已打开。当我手动启动我的应用程序时,它不会检测到 NFC 标签。
为什么在后一种情况下应用程序没有检测到NFC标签?有没有什么方法可以检测和读取在应用程序启动之前(手动)已经附加到设备上的标签?
一般来说这是不可能的。 Android 仅在新发现标签(即标签刚刚被点击)时才将标签分派给应用。因此,当应用程序启动时,应用程序无法访问已经在 NFC 区域中的标签 reader。
由于 Android NFC API 不允许在应用程序内禁用和重新启用 NFC 功能(这只能通过“设置”应用程序完成),它也不允许可以暂时禁用 NFC reader 以欺骗 Android 将标签检测为刚被点击。
然而,在 Android 版本 >= 4.4 和 < 5.1(或者是 < 6.0?)NFC reader 模式的实现中存在错误(未记录的功能?) API(enableReaderMode()
导致标签在启用 reader 模式后被重新检测。因此,在这些 Android 版本上,您可以使用 enableReaderMode()
重新发现已经附加的标签。请注意,虽然这在 AOSP 中有效,但某些设备制造商特定的 Android 修改可能不包含此 bug/feature。