我按照这个过滤意图
<intent-filter>
<action android:name="android.nfc.action.NDEF_DISCOVERED"/>
<category android:name="android.intent.category.DEFAULT"/>
<data android:mimeType="text/plain" />
现在的问题是,当我发现移动设备附近的Ndef标签时,我在我的应用程序中实现的事件正在运行(即使我的应用程序处于关闭状态)。 如何阻止这个?
答案 0 :(得分:2)
可能最好的解决方案是使用NFC前台调度。但是,关闭清单文件中的Intent过滤器可以通过在清单中使用<activity-alias>
element来完成。通过将Intent过滤器放在<activity-alias>
而不是<activity>
元素本身,您可以在应用中随意禁用和启用它。
所以假设你的清单中有:
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="your.app.package">
...
<activity-alias android:name=".yourActivityAlias"
android:enabled="true" android:targetActivity=".yourActivity">
<intent-filter>
<action android:name="android.nfc.action.NDEF_DISCOVERED" />
<category android:name="android.intent.category.DEFAULT" />
</intent-filter>
</activity-alias>
....
</manifest>
然后,您可以通过以下方式停止应用中活动的<activity-alias>
:
PackageManager pkgMgr = getPackageManager();
ComponentName comp = new ComponentName("your.app.package", "your.app.package.yourActivityAlias");
pkgMgr.setComponentEnabledSetting(comp, PackageManager.COMPONENT_ENABLED_STATE_DISABLED,
PackageManager.DONT_KILL_APP);
请注意,新设置仅在重新启动应用程序时生效(因此您可能需要考虑0而不是PackageManager.DONT_KILL_APP)。此外,packagemanager通常需要一段时间才能使新设置生效(可能取决于设备的处理速度)。
答案 1 :(得分:1)
使用ForegroundDispatchSystem。
示例: