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

时间:2015-07-14 13:14:40

标签: android nfc

我有一个包含多个活动的应用程序,第一个活动接受了意图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时,意图TAG_DISCOVERED再次出现,第一个活动MainActivity将第二次打开。如何在应用程序运行时禁用接收该意图?

1 个答案:

答案 0 :(得分:0)

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

为此,您可以使用NfcAdapter的enableForegroundDispatch()方法在NFC前台调度系统中注册您的活动。这使您的当前活动优先于通过所有其他意图过滤器接收NFC事件。有关如何进行此注册的信息,请参阅Advanced NFC: Using the NFC Foreground Dispatch System

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

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