参考网上的资料,自己加以整理。
参考:http://liangruijun.blog.51cto.com/3061169/634411/
http://blog.csdn.net/androidzhaoxiaogang/article/details/6856201
http://www.oschina.net/question/565065_67909?fromerr=sHMTBhj2
Intent的属性包括:action(动作)、data(数据)、category(分类)、compent(组件)、extras(扩展信)。Intent的这些属性描述了发送这个Intent的组件想要做什么,比如打开通讯录、打开网页,而每个Activity、service、receiver在ManiFest中注册的intent-filter会标记它自身会做什么。那么一个Intent被发送出来后,系统就会通过intent-filter来查找能处理这个intent的组件来处理这个intent,如果多个组件都能处理,则由用户选择。所以,Intent译为意图,非常形象。
一、发送Intent
不同的方法会将Intent发送个不同的组件。如startActivity()只会匹配Activity的intent-filter。
二、Intent的属性(Intent如何描述它的意图)
compent:compent是最明确的意图,compent直接指明接收intent的组件,那么系统就不执行查找,直接将intent发送给指明的组件。常用的intent.setClass(),就是就是设置了intent的compent的属性;另外,在启动另一个应用时ComponentName toActivity = new ComponentName("包名", "类名");intent.setComponent(toActivity);
也是设置compent属性。
action:表示将要执行的动作。
ACTION_CALL activity 启动一个电话.
ACTION_EDIT activity 显示用户编辑的数据.
ACTION_MAIN activity 作为Task中第一个Activity启动
ACTION_SYNC activity 同步手机与数据服务器上的数据.
ACTION_BATTERY_LOW broadcast receiver 电池电量过低警告.
ACTION_HEADSET_PLUG broadcast receiver 插拔耳机警告
ACTION_SCREEN_ON broadcast receiver 屏幕变亮警告.
ACTION_TIMEZONE_CHANGED broadcast receiver 改变时区警告.
category:是action的附加信息。我们在MainActivity中经常见到的:
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
其中action表示它第一个启动,category表示它是顶级程序。
data:要实施的具体的数据,一般是一个Uri。例如:
ACTION_VIEW content://contacts/1 –显示ID为1的联系人
ACTION_DIAL content://contacts/1 – 在拨号器中显示ID为1的联系人。
Uri的格式为:scheme://host:port/path or
pathPrefix or
pathPattern
path、pathPrefix、pathPattern可以设置一个或者多个,他们的区别是:
path 用来匹配完整的路径,如:http://example.com/blog/abc.html,这里将 path 设置为 /blog/abc.html 才能够进行匹配;
pathPrefix 用来匹配路径的开头部分,这里将 pathPrefix 设置为 /blog 就能进行匹配了;
pathPattern 用表达式来匹配整个路径
在manifest中可以这样定义:
<intent-filter>
<action android:name="android.intent.action.VIEW"></action>
<category android:name="android.intent.category.DEFAULT"></category>
<data android:scheme="http" android:host="yoursite.com" android:pathPattern=".*//.pdf"></data>
</intent-filter>
匹配符号:
“” 用来匹配0次或更多,如:“a” 可以匹配“a”、“aa”、“aaa”…
“.” 用来匹配任意字符,如:“.” 可以匹配“a”、“b”,“c”…
因此 “.*” 就是用来匹配任意字符0次或更多,如:“.*html” 可以匹配 “abchtml”、“chtml”,“html”,“sdf.html”…
转义:因为当读取 Xml 的时候,“/” 是被当作转义字符的(当它被用作 pathPattern 转义之前),因此这里需要两次转义,读取 Xml 是一次,在 pathPattern 中使用又是一次。如:“” 这个字符就应该写成 “//”,“/” 这个字符就应该写成 “”。
extras:附加信息。可以将一些数据放在extras中,传递数据。