【问题标题】:Android: Can I enable/disable an activity's intent filter programmatically?Android:我可以以编程方式启用/禁用活动的意图过滤器吗?
【发布时间】:2011-09-18 11:34:06
【问题描述】:

我需要根据一些运行时信息在启动器中隐藏或显示我的应用程序图标。我希望仍然能够通过明确的意图运行活动,因此禁用活动不是一个好的选择(我什至不确定它是否会起作用,我还没有尝试过,但是我想会的)。那么,我可以禁用意图过滤器吗?

【问题讨论】:

标签: android intentfilter


【解决方案1】:

您不能直接执行此操作,但您可以在 AndroidManifest.xml 中创建一个带有相关意图过滤器的 activity alias,然后使用 PackageManager#setComponentEnabledSetting() 启用或禁用别名,将您的其他意图过滤器留在Activity 的主副本,因此它们不会受到影响。

【讨论】:

  • this post 开始,您的活动别名的组件名称将是new ComponentName($packageName, $packageName + "." + $aliasName),其中$packageName 是您的应用程序包(通过getActvitiy().getPackageName() 获取)。
  • 如果您使用的是现代版本的 android gradle 插件,您还可以从BuildConfig.APPLICATION_ID(或在稍旧版本的插件上使用BuildConfig.PACKAGE_NAME)获取您的包名。这避免了为了得到总是相同的字符串而进行运行时调用。
  • 我可以删除多个意图吗?如果我的活动对不同类型的 NFC 标签有多个意图,并且在某些时候我不希望我的应用检测 NFC 标签,那么我是否可以有问题地删除多个意图?
猜你喜欢
  • 2017-09-13
  • 2017-03-23
  • 2013-07-03
  • 2012-12-18
  • 2020-02-03
  • 2011-02-13
  • 1970-01-01
  • 2016-01-08
  • 1970-01-01
相关资源
最近更新 更多