【问题标题】:Intent without action cannot pass intent filter test. Why?没有动作的意图不能通过意图过滤器测试。为什么?
【发布时间】:2014-12-02 13:22:52
【问题描述】:

请参阅有关 IntentFilters 的文档:

要通过此测试,Intent 对象中指定的操作必须与过滤器中列出的操作之一匹配。如果对象或过滤器没有指定动作,结果如下:

如果过滤器未能列出任何操作,则没有任何意图匹配,因此所有意图都未通过测试。没有任何意图可以通过过滤器。

另一方面,没有指定动作的 Intent 对象会自动通过测试——只要过滤器至少包含一个动作。

在我的代码中,

Intent intent = new Intent();
    startActivity(intent);


<activity
        android:name=".MainActivity2"
        android:label="@string/title_activity_main_activity2" >

        <intent-filter>
            <action android:name="fdsfds.hihi" />
            <category android:name="android.intent.category.DEFAULT" />

        </intent-filter>
</activity>

为什么我的意图无法启动 .MainActivity2 ?

【问题讨论】:

标签: android android-intent


【解决方案1】:

对于您来说,这可能为时已晚。我来到这里是因为我和你有同样的疑问。我想你犯了和我一样的错误。我将 intent 对象intent filter 混淆了。但仔细阅读文档后,我的疑问得到了解决。

因此,如果 intent-object(您创建的反对意图)未指定任何操作,但您的 intent-filter(在清单文件中)具有至少列出一个动作,您的意图将通过动作测试。尽管不能保证它会通过意图匹配的其余测试。

您没有在过滤器中列出任何操作,因此所有操作测试都将失败(并且通过扩展,意图匹配将失败)。

【讨论】:

    【解决方案2】:
    Intent intent = new Intent();
    intent.setAction("fdsfds.hihi");
    startActivity(intent);
    

    【讨论】:

    • 那不是我想做的。我想测试一个没有动作的意图对象是否可以通过意图过滤器,就像在android文档中所说的那样。
    • 这意味着你想骑一辆没有汽油的自行车。在您提供该意图所需的最少数据之前,该意图不会调用任何活动。
    • 是的。所以你认为这是android文档中的错误?
    • 在此处发布该链接或记录您所说的。我想看看。
    • 如果一个 Intent 没有指定一个动作,它将通过测试(只要过滤器包含至少一个动作)。 (来自本文档)
    【解决方案3】:

    即使过了一年我也会回答。

    首先,我同意你的观点,有时Android doc不一致,这会留下一些疑问。

    但是在这种情况下,文档是正确的:

    如果一个 Intent 没有指定一个动作,它将通过测试(只要过滤器包含至少一个动作)。

    文档没有说的是,如果未定义操作,那么至少必须定义数据字段(或 mime 字段)。

    总之,没有动作或数据就不可能有意图。

    正如@Amrut Bidri 所说,没有燃料就不能骑自行车。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-08-04
      • 1970-01-01
      • 2017-05-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-02-22
      • 1970-01-01
      相关资源
      最近更新 更多