我看到几个不同的应用程序(如NFC TagInfo和NFC TagInfo by NXP)只有在触摸标签时才有自动启动选项(或显示在“选择应用程序”列表中)该选项在首选项中设置,否则它看起来像意图过滤器完全被系统忽略。仅在设置了首选项时处理NFC意图
这怎么能在Android应用程序中完成?
我看到几个不同的应用程序(如NFC TagInfo和NFC TagInfo by NXP)只有在触摸标签时才有自动启动选项(或显示在“选择应用程序”列表中)该选项在首选项中设置,否则它看起来像意图过滤器完全被系统忽略。仅在设置了首选项时处理NFC意图
这怎么能在Android应用程序中完成?
完整的答案是在应用程序的清单使用一个<activity-alias>
,像这样:
<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速度)。
通过使用PackageManager
和setComponentEnabledSetting()
,可以禁用具有您希望忽略的<intent-filter>
的组件。
哇,这是一个快速的答案,我会看看,谢谢':)' – Frxstrem 2012-07-06 21:59:37
这几乎是完全相同的代码,我最终基于CommonsWare的答案,但感谢张贴反正,可能是其他人的一个很好的参考:) – Frxstrem 2012-07-08 09:33:48
对很多不同的情况非常有用,谢谢。 – esse 2013-07-12 06:01:38