Intent和IntentFilter详解
2012-09-10 12:12:10 来源:WEB开发网Intent的Data属性
data属性指定所操作数据的URI。 data经常与action配合使用, 如果action为ACTION_EDIT,data的值应该指明被编辑文档的URI; 如果
action为ACTION_CALL,data的值应该是一个以"tel:"开头并在其后附加号码的URI; 如果action为ACTION_VIEW,data的值应该是一个以"http:"开头并在其后附加网址的URI。。。
Intent类的setData()方法用于设置data属性,setType()方法用于设置data的MIME类型,setDataAndType()方法可以同时设定两者。可以通过getData()方法获取data属性的值, 通过getType()方法获取data的MIME类型。
Intent的Extra属性
通过Intent启动一个component时, 经常需要携带一些额外的数据过去。携带数据需要调用Intent的putExtra()方法, 该方法存在多个重载方法, 可用于携带基本数据类型及其数组, String类型及其数组, Serializable类型及其数组,Parcelable类型及其数组, Bundle类型等。Serializable和Parcelable类型代表一个可序列化的对象, Bundle与Map类似,可用于存储键值对。
Intent的Flag属性
flag属性是一个int值, 用于通知android系统如何启动目标activity,或者启动目标activity之后应该采取怎样的后续操作。所有的flag都在Intent类中定义, 部分常用flag如下:
FLAG_ACTIVITY_NEW_TASK--通知系统将目标activity作为一个新task的初始activity;
FLAG_ACTIVITY_NO_HISTORY--通知系统不要将目标activity放入历史栈中;
FLAG_FROM_BACKGROUND--通知系统这个Intent来源于后台操作, 而非用户的直接选择。。。
IntentFilter类
IntentFilter类表示Intent过滤器, 大部分情况下, 每一个component都会定义一个或多个IntentFilter,用于表明其可处理的Intent。
一般来说,component的IntentFilter应该在AndroidManifest。xml文件中定义。
定义的方法: 在<activity>,<receiver>, <service>元素中增加一个或多个<intent-filter>子元素。如:
<!-- 声明作为程序入口的Activity-->
<activityandroid:name="。FirstActivity">
<intent-filter>
<action android:name="android。intent。action。MAIN"/>
<category android:name="android。intent。category。LAUNCHER"/>
</intent-filter>
</activity>
IntentFilter与隐式Intent
android系统处理隐式Intent时, 会比较Intent和IntentFilter的action,data, category属性, 如果以上3个属性全都相符的话, 则IntentFilter所属的component就可以作为目标组件的候选(存在多个符合条件的component时)。
1。测试action属性。 intent最多只能定义1个action, 而filter可以定义1个或多个action。
通过action测试的条件为: filter定义了intent的action。例如intent的action为"android