以编程方式设置Intents类别

我在AndroidManifest中有一个应用程序和以下几行:

<category android:name="android.intent.category.HOME" /> <category android:name="android.intent.category.DEFAULT" /> <category android:name="android.intent.category.MONKEY"/> 

我的问题是:是否有可能以编程方式设置这些选项? 我的意思是,一些用户将能够启用或禁用上述选项。

这样做是为了让我的应用程序成为一个启动器。

那么,是否有可能在这个条件下,所以我可以取决于用户呢?

版本:我编辑了这个问题来添加Rawr的build议。

这是我在打电话给我的主要活动之前所做的事情:

  Intent myIntent = new Intent(v.getContext(), MainActivity.class); myIntent.addCategory(Intent.CATEGORY_HOME); myIntent.addCategory(Intent.CATEGORY_DEFAULT); myIntent.addCategory(Intent.CATEGORY_MONKEY); startActivity(myIntent); 

如果我在清单中使用这些命令,它们就可以工作。 按Home键不能离开我的应用程序。 像上面手动添加类别不起作用。

有什么build议么?

先谢谢你!

Solutions Collecting From Web of "以编程方式设置Intents类别"

当你创build一个intent你可以使用addCategory来指定这个intent的类别。 根据android文档 ,当解决这个意图时,只会使用提供所有指定类别的活动。 所以例如,如果你这样做

 Intent i = new Intent(); i.addCategory(Intent.CATEGORY_HOME); i.addCategory(Intent.CATEGORY_DEFAULT); 

您可以将家庭和默认类别与您希望的任何其他自定义类别一起添加到您的意图中。 你从那里做什么取决于你。 我不知道这个意图的目的是什么,所以我会放弃这个意图。

至于你提供的行为是评论,我认为这是有意义的filter的需要。 除非您仍然包含filter来响应该类别,否则设置意图类别的成效并不高。

 <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.HOME" /> <category android:name="android.intent.category.DEFAULT" /> </intent-filter> 

在清单中设置意图filter将有效地监听您以编程方式设置的类别。 这就是为什么你仍然需要清单中的相应类别标签来捕捉意图。

我遇到了这样做的另一种方式 – 基本上你不能完全按照你的要求,但是你可以禁用/启用你的应用程序的特定Activities

所以你可以把你的Home应用默认为禁用,那么如果用户想使用它,他们可以以编程方式启用它。

我的信息来自@Commonsware的以下答案 ,我在这里复制:


您既不能以编程方式启用,禁用或创build<intent-filter>

不过,就你而言,每个组件只有一个<intent-filter> 。 在这种情况下,可以通过PackageManagersetComponentEnabledSetting()编程方式启用和禁用组件 。 在您的情况下,启用或禁用该活动与启用或禁用其<intent-filter>具有相同的基本效果。


  • 以上答案最初由@Commonsware在不同的线程
  • 这里是 @mlc的另一个有用的答案