enableReaderMode和enableForegroundDispatch有什么区别?

Héc*_*tor 10 tags android nfc android-beam hce

我找到了两种让Android应用检测和处理NFC标签的方法:

  1. NfcAdapter.enableReaderMode(activity, callback, flags, extras) 然后在回调中接收标记信息.

  2. NfcAdapter.enableForegroundDispatch(activity, intent, filters, techLists)然后在onNewIntent(intent)activity方法中接收标记信息.

我目前使用的是第二种方法,但是,我最近发现了这种enableReaderMode方法,并想知道用它来处理NFC标签是否更好.

那么enableReaderMode和之间的区别是什么enableForegroundDispatch

Mic*_*and 15

前台调度系统

NfcAdapter.enableForegroundDispatch()自Android 2.3.3(基本上是Android NFC的开始)以来,forground dispatch system()一直存在.因此,所有具有NFC功能的Android设备都支持此方法.

前台调度系统用于在处理NFC发现事件(即,从对等设备接收的已发现的NFC标签和NDEF消息)中给出当前处于前景优先级的活动.这意味着即使另一个应用程序(通过AndroidManifest.xml中的intent过滤器)注册了特定标记类型或NDEF数据,NFC事件仍将传递给前台活动而不是其他活动.因此,该方法不会改变Android侦听NFC设备(NFC标签,P2P设备)的方式,只会改变处理已发现设备的优先级.

读者模式API

读者模式API(AndroidManifest.xml)是在Android 4.4中引入的.因此,并非所有具有NFC功能的Android设备都支持此方法.

与前台调度系统相反,阅读器模式API确实改变了Android侦听NFC设备的方式.reader-mode API禁用点对点模式.例如,这允许您发现具有点对点模式和卡仿真模式的其他设备的卡仿真模式(如Android HCE的情况).(通常,这样的设备会被发现为点对点设备,而Android应用程序将无法访问卡模拟功能.)

此外,您可以更改NFC阅读器模式的特定参数,例如,您可以

  • 定义NFC读取器轮询的标签技术,
  • 通过向标记发送某个命令序列并检查是否仍然收到响应,定义Android测试标记是否仍然存在的时间间隔,
  • 阻止Android自动向标签发送命令,以测试标签是否包含NDEF消息,
  • 阻止Android在标记发现时播放声音.

  • 嘿迈克尔,非常有用的信息。谢谢!还有一个问题:如果我在前台活动中启用阅读器模式,这是否意味着它也会像前台调度系统一样覆盖现有的标签调度系统? (3认同)
  • @Yashasvi 是的,阅读器模式也会覆盖所有其他标签调度。 (2认同)
  • @MichaelRoland,在 Android 10 上,enableReaderMode 覆盖所有其他标签调度似乎不再正确。在调用 enableReaderMode 后扫描标签时,我收到来自 Android 操作系统的 toast 消息,提示“此 NFC 标签不支持应用程序”。但是,我仍然在 onTagDiscovered 回调中接收标签并正常处理它。不过,使用enableForegroundDispatch会阻止显示Android操作系统toast。 (2认同)

S.P*_*ols 5

enableReaderMode:当此 Activity 在前台时,将 NFC 控制器限制为读取器模式。

enableForegroundDispatch:这将在将发现的标签分派给应用程序时优先考虑前台活动。

所以基本上你可以将两者用于相同的目的,即读/写标签。enableReaderMode由 Android 手机与 Broadcom NFC 控制器结合使用,因为存在检查存在错误。据我所知,只有enableReaderMode通过增加EXTRA_READER_PRESENCE_CHECK_DELAY.