enableReaderMode和enableForegroundDispatch有什么区别?

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

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

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

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

那么enableReaderModeenableForegroundDispatch什么enableForegroundDispatch

前台调度系统

自Android 2.3.3(基本上是Android NFC的开始)以来, NfcAdapter.enableForegroundDispatch() dispatch系统( NfcAdapter.enableForegroundDispatch() )存在。 因此,所有具有NFCfunction的Android设备都支持此方法。

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

读者模式API

读者模式API( NfcAdapter.enableReaderMode() )是在Android 4.4中引入的。 因此,并非所有具有NFCfunction的Android设备都支持此方法。

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

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

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

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

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

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