这两组意图过滤器有什么区别?

<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)时,第一个才有效。第二种将与提供的动作和类别的任何组合一起使用。

那是对的吗?

最佳答案

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


  如果任何给定值与Intent操作匹配,则Action匹配;如果
  过滤器未指定任何操作,则只会匹配
  不包含动作。
  
  如果意图中的所有类别均匹配,则类别匹配
  过滤器中给出的类别。过滤器中的其他类别
  不在意图中不会导致匹配失败。注意
  与操作不同,没有类别的IntentFilter仅会匹配
  没有任何类别的Intent。


因此,第一个版本将符合以下意图:


行动=行动1
act = action1 cat = [category1]
行动=行动2
act = action2 cat = [category2]


第二个适合这些:


行动=行动1
act = action1 cat = [category1]
act = action1 cat = [category2]
act = action1 cat = [category1,category2]
行动=行动2
act = action2 cat = [category1]
act = action2 cat = [category2]
act = action2 cat = [category1,category2]


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

07-24 18:31