我正在开发一款必须能够读取NFC标签的应用。我花了很多时间阅读文档,但最后我有点困惑,如果我打算做的事情是正确的(如果可能的话),我需要一点提示)。
我的应用必须能够以两种不同的方式阅读NFC标签:
1 - 用户每次需要时都必须手动激活阅读:他点击"阅读" MainActivity UI中的按钮,将NFC放在设备附近;这是默认工作模式,无法禁用。我知道通过使用PendingIntent和IntentFilter声明一个新意图,我将在onNewIntent中接收标签数据。
2 - 应用程序已关闭;一个标签放在设备附近,Android启动我的应用程序并将Intent传递给标签数据。通过将intent过滤器放入清单并使用onCreate中的getIntent(),我会收到数据。
现在我怀疑的是: - 我的NFC活动不是MainActivity:那么,是否可以在任何地方声明新的意图过滤器(使用enableForegroundDispatch),或者必须在主要声明它们?
在哪里声明我的意图过滤器?我肯定需要他们进入清单,因为" app已关闭"但是,当我在其他场景的代码中重新声明它们时会发生什么?
用户可以启用"应用已关闭"方案,但仍然保持应用程序运行;如何让这两件事同时发挥作用?例如......用户在主屏幕上,因此没有调用enableForegroundDispatch(或者在最后一次读取时调用了disableForegroundDispatch)。将标签放在设备附近会发生什么?
谢谢大家,以防万一: - )
答案 0 :(得分:0)
在哪里声明我的意图过滤器?
对于应用程序已关闭的方案:为NFC事件应启动的活动声明它们。
对于前台场景中的活动:您声明您的活动应优先于使用enableForegroundDispatch(和/或enableReaderMode)的所有已注册的NFC意图过滤器。
我肯定需要他们进入清单,因为" app已关闭"但是,当我在其他场景的代码中重新声明它们时会发生什么?
两种方法完全相互独立。它们提供不同(但互补)的功能。您可以将两者结合使用。通常,您将注册应在清单中启动应用程序/活动的事件,并另外注册前台调度,以使您的活动优先于用户可见的所有其他活动。