启动应用程序时检测到NFC标签

3

我希望注册一个应用程序,在检测到NFC标签时启动该应用程序。经过搜索,我发现需要使用

[IntentFilter(new[] { NfcAdapter.ActionTechDiscovered })]

在主活动上。然而,应用程序没有启动(我也没有被提示选择应用程序)。相反,一个通用的标签阅读器打开了。

问题出在哪里?

1个回答

3

ActionTechDiscovered 意图过滤器需要一个技术列表,指定标签技术(或它们的组合)来启动您的活动。您可以使用以下方式指定技术列表文件:

[IntentFilter (new[]{NfcAdapter.ActionTechDiscovered})]
[MetaData (NfcAdapter.ActionTechDiscovered, Resource="@xml/nfctech")]

然后,您需要将文件“nfctech.xml”放置在文件夹“Resources/xml”中。在此文件中,您可以定义要侦听的所有标签技术。例如,要侦听任何标签技术,您可以使用:

<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
    <tech-list>
        <tech>android.nfc.tech.NfcA</tech>
    </tech-list>
    <tech-list>
        <tech>android.nfc.tech.NfcB</tech>
    </tech-list>
    <tech-list>
        <tech>android.nfc.tech.NfcF</tech>
    </tech-list>
    <tech-list>
        <tech>android.nfc.tech.NfcV</tech>
    </tech-list>
    <tech-list>
        <tech>android.nfc.tech.NfcBarcode</tech>
    </tech-list>
 </resources>

太棒了。在ClassLibrary项目中定义技术列表的简单方法是什么?我想避免在解决方案中存在的所有(3个)应用程序中都定义它。 - pikausp
不知道,我从未使用过 [tag:Xamarin]。 - Michael Roland
啊,还有一个问题,关于应用程序生命周期。当您隐藏应用程序并将其重新打开时,会调用OnResume,但是我认为此解决方案会关闭并重新启动应用程序,因为会调用OnCreate,这是否正确?如果是这样,那么这是期望的行为吗? - pikausp
根据我在Android NFC方面的经验,这似乎会随着版本的变化而略有不同。通常情况下,如果您手动启动了活动并将其置于后台(实际上是将整个活动堆栈置于后台),然后通过NFC意图过滤器启动活动,则会创建一个新的活动实例(不太确定它是否放在应用程序现有活动堆栈的顶部,或者是否是具有NFC服务根活动作为堆栈根的新活动堆栈)。 - Michael Roland

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接