我见过几个不同的应用程序(如NXP 的NFC TagInfo和NFC TagInfo ),只有当在首选项中设置了该选项时,才会在触摸标签时选择自动启动(或显示在“选择应用程序”列表中) ,否则系统似乎完全忽略了意图过滤器。
这如何在 Android 应用程序中完成?
我见过几个不同的应用程序(如NXP 的NFC TagInfo和NFC TagInfo ),只有当在首选项中设置了该选项时,才会在触摸标签时选择自动启动(或显示在“选择应用程序”列表中) ,否则系统似乎完全忽略了意图过滤器。
这如何在 Android 应用程序中完成?
完整的答案是<activity-alias>
在应用程序的清单中使用 an ,如下所示:
<activity-alias
android:name=".ActivityAlias"
android:targetActivity=".YourActualActivity"
android:enabled="false" >
<intent-filter>
<action android:name="android.nfc.action.NDEF_DISCOVERED" />
<category android:name="android.intent.category.DEFAULT" />
</intent-filter>
</activity-alias>
YourActualActivity
是您希望能够打开或关闭意图过滤器的类。由于您不想禁用完整的活动,因此您可以使用活动别名,在其中放置要启用的意图过滤器(此处默认情况下禁用)。
在您的 PreferenceActivity 中,您设置了一个在特定设置更改时调用的侦听器。然后它会做这样的事情:
getPackageManager().setComponentEnabledSetting(
new ComponentName("your.package.name", "your.package.name.ActivityAlias"),
changedBooleanPreference ? PackageManager.COMPONENT_ENABLED_STATE_DISABLED :
PackageManager.COMPONENT_ENABLED_STATE_ENABLED,
PackageManager.DONT_KILL_APP);
这changedBooleanPreference
是已更改的设置。
请注意,包管理器可能需要一些时间才能使更改生效。这取决于 Android 版本发生这种情况的时间和速度(可能还取决于设备的 CPU 速度)。
您可以使用和禁用<intent-filter>
您希望忽略的组件。PackageManager
setComponentEnabledSetting()