当我关闭该应用程序时,如何停止NDEF_DISCOVERED意向接收器?

时间:2012-04-11 07:00:54

标签: android nfc

我按照这个过滤意图

<intent-filter>    
<action android:name="android.nfc.action.NDEF_DISCOVERED"/>
<category android:name="android.intent.category.DEFAULT"/>
<data android:mimeType="text/plain" />

现在的问题是,当我发现移动设备附近的Ndef标签时,我在我的应用程序中实现的事件正在运行(即使我的应用程序处于关闭状态)。 如何阻止这个?

2 个答案:

答案 0 :(得分:2)

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

答案 1 :(得分:1)