enableReaderMode和enableForegroundDispatch有什么区别?

时间:2015-11-10 15:36:50

标签: android tags nfc hce android-beam

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

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

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

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

    那么enableReaderModeenableForegroundDispatch之间有什么区别?

2 个答案:

答案 0 :(得分:12)

前台调度系统

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

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

Reader-mode API

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

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

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

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

答案 1 :(得分:4)

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

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

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