【问题标题】:Set Intents category programmatically以编程方式设置意图类别
【发布时间】:2013-05-08 17:20:37
【问题描述】:

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

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

有什么建议吗?

提前谢谢你!

【问题讨论】:

    标签: android android-intent


    【解决方案1】:

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

    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>
    

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

    【讨论】:

    • 你好@Rarw!谢谢你的回答。这是我所做的: Intent myIntent = new Intent(v.getContext(), MainActivity.class); myIntent.addCategory(Intent.CATEGORY_HOME); myIntent.addCategory(Intent.CATEGORY_DEFAULT); myIntent.addCategory(Intent.CATEGORY_MONKEY);开始活动(我的意图);然而它没有用。如果我将这些类别放在我的清单中,它们就可以工作(你不能让我的应用程序按下主页按钮)。当我像你说的那样做时,它不起作用。你仍然可以让我的应用按下主页按钮。
    • 我添加了一个关于原因的解释。请看上面
    • 你好,Rarw!再次感谢您的解释!那么,是否有可能以编程方式完成所有操作?我的意思是,如果我有两个用户,一个可以通过按主页按钮离开应用程序,另一个不能这样做。是否也可以通过编程方式设置意图过滤器?
    • 您可以通过编程方式创建意图过滤器。老实说,听起来你在这里得到的是所谓的BroadcastReceiverHere's a link 到一些幻灯片,解释了如何在 Java 代码中注册和 IntentFilter。不过,根据我对 android 文档的理解,我会提醒一句警告,它​​的错误形式是覆盖主页按钮。与您可以自定义主页的后退按钮不同,它并不是为了被捕获和重新路由。但你比我更了解你的应用。
    • 感谢Rarw的建议!我真的需要覆盖主页按钮,因为我的应用程序应该是一个信息亭应用程序。我会检查你发送的链接。再次感谢您!
    【解决方案2】:

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

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

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


    您不能以编程方式启用、禁用或创建&lt;intent-filter&gt;s。

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


    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-11-10
      • 2013-11-23
      • 2017-02-26
      • 2012-08-09
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多