我正在编写一个使用 od NFC 标签的应用程序。我希望 NFC 标签成为我的应用程序的入口点 - 关闭包含标签的卡片到电话应该开始我的活动。然后,当活动运行时,我想禁用所有可以使用 NFC 标签的意图过滤器,所以另一个特写镜头不会做任何事情(我不希望我的活动重新开始)。我知道如何使用活动别名“禁用”我的意图过滤器:
<activity-alias android:enabled="true"
android:name=".alias.NFCEntryPoint"
android:targetActivity="pl.mitrue.safedb.NFCEntryPoint"
android:exported="true"
android:icon="@drawable/ic_launcher"
android:label="@string/alias.pl.mitrue.safedb.NFCEntryPoint" >
<intent-filter>
<action android:name="android.nfc.action.TAG_DISCOVERED" />
<category android:name="android.intent.category.DEFAULT" />
</intent-filter>
</activity-alias>
然后我可以以编程方式禁用别名,所以我的意图过滤器也被禁用:
getPackageManager().setComponentEnabledSetting(new ComponentName("pl.mitrue.safedb", "pl.mitrue.safedb.alias.NFCEntryPoint"),
PackageManager.COMPONENT_ENABLED_STATE_DISABLED, PackageManager.DONT_KILL_APP);
现在问题来了:我的设备上安装了其他使用这种过滤器的应用程序。现在,当我的应用程序正在运行并且我禁用了我的意图过滤器(通过禁用活动别名)时,会出现一个对话框,要求我选择要使用的应用程序。有没有办法避免这种情况?在最简单的情况下,一旦我的应用程序启动,我不想在关闭 NFC 标签时采取任何行动。有没有办法让我的应用程序成为唯一可以接收外部意图的应用程序?
记录一下:我不想完全关闭 NFC(我什至不知道这是否可能),因为我以后可能想在其他活动中使用它。
我希望我已经把我的观点说清楚了。请理解,因为我是新来的。
谢谢!