0

我有一个 NFC 应用程序,它在清单中设置了所有适当的意图过滤器,以仅响应特定类型的 NFC 技术。

这部分有效,但我不明白如果另一个应用程序具有完全相同类型的过滤器会做什么。

我的应用程序会忽略除特定类型之外的所有 nfc 标签,扫描时我的应用程序会从 onDestroyed()(或根本不运行)弹出到 onCreate() 并从标签中读取信息。

现在这被我的标签中的信息进一步过滤,我放置了一种特殊的字符串,我的应用程序正在寻找它。但不幸的是,这要求它在确定它是哪种技术之后阅读标签。如果它不是我的字符串之一,该应用程序就会消失 - 但我不明白如果另一个应用程序正在寻找相同类型的技术会发生什么。

我更愿意发生的是我的应用程序在看到这个标签时被加载,但是在忽略它之后就消失了。然后其他具有完全相同过滤器集的应用程序可以加载并在标签上运行。但我不明白这是如何处理的,我可以预见许多 NFC 应用程序将进入市场。

洞察力赞赏。

4

2 回答 2

1

但我不明白如果另一个应用程序正在寻找相同的技术会发生什么

据推测,用户将看到一个活动选择器。

我更愿意发生的是我的应用程序在看到这个标签时被加载,但是在忽略它之后就消失了。然后其他具有完全相同过滤器集的应用程序可以加载并在标签上运行。

如果我的活动选择器猜测是正确的,那么唯一可行的方法是:

  1. 在安装您的应用并点击相关标签后,用户选择您的应用作为此类 NFC 标签的默认处理程序,并且

  2. 您在确定它不是您的标签类型后,为任何其他相关活动弹出您自己的手动活动选择器,通过使用PackageManagerqueryIntentActivities()等将自己从列表中过滤出来

但我不明白这是如何处理的,我可以预见许多 NFC 应用程序将进入市场。

我预计大多数 NFC 应用程序将专注于与 NDEF 兼容的标签,这会使这变得简单得多。

于 2011-10-21T22:59:47.850 回答
0

活动选择器确实会显示是否有多个应用程序可以处理 ACTION_TECH_DISCOVERED 意图。如果我正确理解你的问题,你真的不能阻止活动选择器显示多个应用程序是否可以处理标签,除非你使用前台调度,如果可能的话,如果你的应用程序在前台,它可以让你的应用程序处理意图。它将取代任何其他可以处理它并且不显示活动选择器的应用程序。如果在检查数据并发现它不是您想要的标签后,我认为您可能会广播意图,以便其他应用程序可以尝试处理它。查看:

http://developer.android.com/guide/topics/nfc/advanced-nfc.html#foreground-dispatch

了解更多信息。

于 2011-10-26T00:19:01.277 回答