Intent和IntentFilter
1.Intent
Intent被称为意图,是程序中各组件进行交互的一种重要方式,它可以指定当前组件执行动作,也可以在不同组件之间进行数据传递。一般用于启动Activity,Service以及发送广播等。
1.显式Intent
显示Intent指的是直接指定目标组件使用Intent显式指定要跳转的目标Activity
代码如下(示例):
Intent intent = new Intent(this,SecondActivity.class);
starActivity(intent);
该代码创建的Intent对象传入了2个参数,第一个参数是this表示当前的Activity,第二个参数是SecondActivity.class表示要跳转到的目标Activity。
2.隐式Intent
隐式Intent不会明确指出需要激活的目标组件,它被广泛地应用在不同应用程序之间传递消息。Android系统会使用IntnetFilter匹配相应的组件,匹配的属性主要包括:
属性 | 作用 |
---|
action | 表示Intent对象要完成的动作 |
data | 表示Intent对象要完成的动作 |
category | 表示为action添加的额外信息 |
IntentFilter
当发送一个隐式Intent后,Android系统会将它与程序中的每一个组件的过滤器进行匹配,匹配属性有action,data,category,需要这三个属性都匹配成功才能唤起相应的组件。
1.action属性匹配规则
action属性用来指定Intent对象的工作
<intent-filter>
<action android:name="android.intent.action.EDIT">
</intent-filter>
< intent-filter >标签中间可以罗列多个action属性,但是当使用隐式Intent激活组件时,只要Intnt携带的action与其中一个< intent-filter >标签中action的声明相同,action属性就匹配成功。
2.data属性匹配规则
data属性用来指定数据的URI或者数据MIME类型,它的值通常与Intent的action属性有关联。
<intent-filter>
<action android:mimeType="video/mpeg" android:scheme="http...">
</intent-filter>
< intent-filter >标签中间可以罗列多个data属性,每个data属性可以指定数据MIME类型和URI。MIME类型可以表示image/ipeg、video/*等媒体类型。
隐式Intent携带的data数据只要与IntentFilter中的任意一个data声明相同,data属性就匹配成功。
2.category属性匹配规则
category属性用于action添加额外信息,一个IntentFilter可以不声明category属性,也可以声明多个category属性。
<intent-filter>
<category android:name="android.intent.category.DEFAULT">
</intent-filter>
隐式Intent中声明的category必须全部能够与某一个IntentFilter中的category匹配才算匹配成功。IntentFilter中罗列的category属性数量必须大于或者等于隐式Intent携带的category属性数量时,category属性才能匹配成功。如果一个隐式Intent没有设置category属性,那么它可以通过任何一个IntentFilter(过滤器)的category匹配
