【问题标题】:Handle NFC intents only when preference is set仅在设置首选项时处理 NFC 意图
【发布时间】:2012-07-06 21:55:55
【问题描述】:

我见过几个不同的应用程序(如NFC TagInfoNFC TagInfo by NXP),它们可以选择在触摸标签时自动启动(或显示在“选择应用程序”列表中)只有在 em> 该选项已在首选项中设置,否则系统似乎完全忽略了意图过滤器。

如何在 Android 应用程序中做到这一点?

【问题讨论】:

    标签: android nfc


    【解决方案1】:

    完整的答案是在应用的清单中使用<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 速度)。

    【讨论】:

    • 这与我根据 CommonsWare 的回答最终得到的代码几乎完全相同,但无论如何感谢您发布它,可能对其他人来说是一个很好的参考:)
    【解决方案2】:

    您可以使用PackageManagersetComponentEnabledSetting() 禁用具有您希望忽略的&lt;intent-filter&gt; 的组件。

    【讨论】:

    • 哇,这个答案很快,我去看看,谢谢:)
    猜你喜欢
    • 1970-01-01
    • 2021-05-06
    • 2016-10-30
    • 1970-01-01
    • 2014-10-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-12-31
    相关资源
    最近更新 更多