以编程方式设置Intents类别

时间:2013-05-08 17:20:37

标签: android android-intent

我在AndroidManifest中有以下几行的应用程序:

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

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

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

那么,是否可以对此设置条件,所以我可以根据用户进行设置?

EDITION:我编辑了这个问题,添加了Rawr的建议。

以下是我在调用主要活动之前所做的事情:

        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);

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

有什么建议吗?

提前谢谢!

2 个答案:

答案 0 :(得分:5)

创建intent时,您可以使用addCategory来确定该意图的特定类别。根据{{​​3}},在解决此意图时,将仅使用提供所有指定类别的活动。例如,如果你做了

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

您可以将主页和默认类别与您希望的任何其他自定义类别一起添加到您的意图中。你用它做什么取决于你。我不知道意图的目的是什么,所以我会留下它。

至于你评论中提供的行为,我认为这与需要一个意图过滤器有关。除非您仍然包含过滤器以响应该类别,否则设置意图的类别并不会有太大帮助。

<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>

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

答案 1 :(得分:4)

我遇到了一种不同的做法 - 基本上你不能完全按照你的要求做,但你可以禁用/启用应用的特定Activities

因此,默认情况下您可以将您的Home应用程序设置为已禁用,然后如果用户想要使用它,则可以以编程方式启用它。

我的信息来自following answer @Commonsware,我在这里重复:


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

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