11

我在 AndroidManifest 中有一个包含以下行的应用程序:

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

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

这样做是将我的应用程序保留为启动器。

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

编辑:我编辑了这个问题以添加 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);

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

有什么建议么?

先感谢您!

4

2 回答 2

6

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

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>

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

于 2013-05-08T18:38:26.997 回答
4

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

因此,您可以将 Home 应用程序默认禁用,然后如果用户想要使用它,他们可以通过编程方式启用它。

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


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

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


于 2013-09-04T11:02:14.277 回答