1

这些意图过滤器集有什么区别?

<intent-filter>
    <action android:name="action1">
    <category android:name="category1">
</intent-filter>
<intent-filter>
    <action android:name="action2">
    <category android:name="category2">
</intent-filter>

<intent-filter>
    <action android:name="action1">
    <category android:name="category1">
    <action android:name="action2">
    <category android:name="category2">
</intent-filter>

我认为第一个只有在意图动作/类别与其中一对匹配时才有效(即 action1/category1 和 action2/category2 但不是 action1/category2 或 action2/category1)。第二个将与提供的操作和类别的任何组合一起使用。

那是对的吗?

4

1 回答 1

3

http://developer.android.com/reference/android/content/IntentFilter.html

如果任何给定值与 Intent 动作匹配,则动作匹配;如果过滤器没有指定任何动作,那么它只会匹配不包含动作的 Intent。

如果 Intent 中的所有类别都与过滤器中给定的类别匹配,则类别匹配。过滤器中不在 Intent 中的额外类别不会导致匹配失败。请注意,与操作不同的是,没有类别的 IntentFilter 只会匹配没有任何类别的 Intent。

所以第一个版本将符合这些意图:

  • 行动=行动1
  • 行动=行动 1 猫=[类别 1]
  • 行动=行动2
  • act=action2 cat=[category2]

第二个适合这些:

  • 行动=行动1
  • 行动=行动 1 猫=[类别 1]
  • act=action1 cat=[category2]
  • act=action1 cat=[category1,category2]
  • 行动=行动2
  • 行动=行动2猫=[类别1]
  • act=action2 cat=[category2]
  • act=action2 cat=[category1,category2]

如您所见,一个 Intent 中可以有更多类别,但您只能有一个操作。

于 2013-10-09T10:17:57.077 回答