0

我像这样过滤意图

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

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

4

2 回答 2

2

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

于 2012-04-11T14:56:43.347 回答
1

使用 ForegroundDispatchSystem。

例子:

http://developer.android.com/resources/samples/ApiDemos/src/com/example/android/apis/nfc/ForegroundDispatch.html

于 2012-04-11T07:39:41.543 回答