如何停止从标签接收意图 TAG_DISCOVERED?

How to stop receiving intent TAG_DISCOVERED from the tag?

我有一个包含多个活动的应用程序,第一个 activity 接受了意图 TAG_DISCOVERED:

<activity android:name="com.iba.main.MainActivity" android:label="@string/app_name"
          android:launchMode="singleTask">
    <intent-filter>
        <action android:name="android.intent.action.MAIN"/>
        <category android:name="android.intent.category.LAUNCHER"/>
    </intent-filter>
    <intent-filter>
        <action android:name="android.nfc.action.TAG_DISCOVERED"/>
        <category android:name="android.intent.category.DEFAULT" />
    </intent-filter>
</activity>

所有其他活动在 AndroidManifest.xml 中描述如下:

<activity android:name="com.iba.etd.EtdActivity" android:launchMode="singleTask" />

但是打开EtdActivity的时候,intentTAG_DISCOVERED又来了,第一个activity,MainActivity,正在第二次打开。当应用程序已经 运行?

时如何禁用接收该意图

您可以为前台调度系统注册您的所有活动。这允许您的所有活动接收,然后 discard/ignore 所有 NFC 发现事件。

为此,您将使用 NfcAdapter 的 enableForegroundDispatch() method. This gives your current activity precedence in receiving NFC events over all other intent filters. See Advanced NFC: Using the NFC Foreground Dispatch System 向 NFC 前台调度系统注册您的 activity 如何进行此注册。

一旦您注册了前台调度系统,您的 activity 将在其 onNewIntent() 方法中接收所有 NFC 意图(或作为待处理的意图结果,具体取决于您的注册方式)。在那里,您可以简单地忽略这些事件。

另请注意,您通常 而不是 想要在 AndroidManifest.xml 中注册 TAG_DISCOVEREDTAG_DISCOVERED 仅作为后备机制,只有在没有其他应用注册特定标签时才会触发。相反,您应该尝试使用 NDEF_DISCOVERED(如果您的标签包含 NDEF 结构化数据)或 TECH_DISCOVERED(注册特定标签技术)。