仅在设置了首选项时才处理NFC意图

时间:2012-07-06 21:55:56

标签: android nfc

我看过几个不同的应用(例如NFC TagInfoNFC TagInfo by NXP),可以选择在触摸代码时自动启动(或显示在“选择应用”列表中)只有在首选项中设置该选项时,系统才会完全忽略意图过滤器。

如何在Android应用程序中完成此操作?

2 个答案:

答案 0 :(得分:7)

完整的答案是在应用的清单中使用<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是您希望能够打开或关闭intent过滤器的类。由于您不想禁用完整活动,因此使用活动别名来放置要启用的intent过滤器(默认情况下禁用此功能)。

在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速度)。

答案 1 :(得分:1)

您可以使用<intent-filter>PackageManager停用包含您希望忽略的setComponentEnabledSetting()的组件。