我有一个包含多个活动的应用程序,第一个活动接受了意图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将第二次打开。如何在应用程序运行时禁用接收该意图?
答案 0 :(得分:0)
您可以为前台调度系统注册所有活动。这允许您的所有活动接收然后丢弃/忽略所有NFC发现事件。
为此,您可以使用NfcAdapter的enableForegroundDispatch()
方法在NFC前台调度系统中注册您的活动。这使您的当前活动优先于通过所有其他意图过滤器接收NFC事件。有关如何进行此注册的信息,请参阅Advanced NFC: Using the NFC Foreground Dispatch System。
注册前台调度系统后,您的活动将以onNewIntent()
方式接收所有NFC意图(或作为待处理的意图结果,具体取决于您的注册方式)。在那里,你可以简单地忽略这些事件。
另请注意,您通常不想要在AndroidManifest.xml中注册TAG_DISCOVERED
。 TAG_DISCOVERED
仅作为后备机制,只有在没有其他应用注册特定代码时才会触发。相反,您应该尝试使用NDEF_DISCOVERED
(如果您的标记包含NDEF结构化数据)或TECH_DISCOVERED
(注册特定标记技术)。