可能最好的解决方案是使用 NFC 前台调度。但是可以通过使用清单中的<activity-alias>
元素来关闭清单文件中的 Intent 过滤器。通过将 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)。此外,包管理器通常需要一段时间才能使新设置生效(可能取决于设备的处理速度)。