使用Intent和IntentFilter进行通信
使用 Intent 和 IntentFilter 进行通信---Intent封装Android应用程序需要启动某个组件的“意图”。Intent还是应用程序组件之间的通信的重要媒介(携带bundle对象)。
Intent对象
Intent封装了程序想要启动程序的意图,还可用于与被启动组件交换信息。
大致包含Component、Action、Category、Data、Type、Extra和Flag这7种属性
其中Component用于明确指定需要启动的目标组件,
而Extra则用于"携带"需要交换的数据。
Intent 的属性 及 intent-filter 配置
Component 属性---显示Intent
接受一个ComponentName对象,包含如下构造器:
ComponentName(String pkg,String cls)
ComponentName(Context pkg,String cls)
ComponentName(Context pkg,Class<?> cls)
Intent还包含如下三个方法
setClass(Context packageContext,Class<?> cls)
setClassName(Context packsgeContext,String className)
setClassName(String packsgeName,String className)
context---代表访问该应用环境信息的接口,android应用的包名则作为应用的唯一标识,因此context对象与该应用的包名有一一对应的关系
Intent提供了简化的构造器
Action、Category 属性与 intent-filter 配置---隐示Intent
Action---代表该Intent所要完成的一个抽象“动作”,一个Intent最多只能包含一个Action属性
intent.setAction(Strong str)
Category---则用于为Action增加额外的附加类别信息,可以包含多个Category属性
intent.addCategory()
具体启动哪个Activity取决于Activity配置中<intent-filter .../>
<intent-filter.../>---AndroidManifest.xml文件中<activity.../>元素的子元素
用于配置该Activtity所能“响应”的Intent
包含如下元素
0~N个<action.../>子元素---android:name
0~N个<category.../>子元素---android:name
0~1个<data.../>子元素
只要某个组件能满足的要求大于、等于Intent所指定的要求,那么该Intent就能启动该组件。
指定Action、Category条用系统Activity---Intent可以启动Android系统的其他应用的程序组件,包括系统自带的程序组件
Android内提供了大量标准的Action、Category常量
ACTION_GET_CONTENT---让用户选择数据,并返回所选数据
CATEGORY_HOME---随系统启动而运行
Data、Type 属性 与 intent-filter 配置
Data:通常用于向Action属相提供操作的数据。接受一个Uri对象
Type:用于指定该Data属性所指定的Uri对应的MIME类型
Data和Type两个属性会相互覆盖,如果需要同时两个属性,则应该调用Intent的setDataAndType()方法
AndroidManifest.xml文件中为组件声明Data、Type属性都通过<data.../>元素
android:
mimeType
scheme
host
port
path
pathPrefix---path前缀
pathPattern---path字符串模板
Intent的Type属性用于指定该Intent的要求,对应组件中<intent-filter.../>元素的<data.../>子元素的mimeType属性必须于此相同,才能启动该组件。
使用Action、Data属性启动系统Activity
String data=“...”
Uri uri=Uri.parse(data)
intent.setData(uri)
intent.setAction(Intent.ACTION_VIEW)
Extra 属性---通常用于在多个Action之间进行数据交换,Intent的Extra属性值应该是一个Bundle对象,Bundle对象就像是一个Map对象,可以存入多个key-value对,这样就可以通过Intent在不同的Activity之间进行数据交换了。
Flag 属性---用于为该Intent添加一些额外的控制旗标,Intent可调用addFlags()方法来添加控制旗标。
FLAG_ACTIVITY_BROUGHT_TO_FRONT
FLAG_ACTIVITY_CLEAR_TOP
FLAG_ACTIVITY_NEW_TASK
FLAG_ACTIVITY_NO_ANIMATION
FLAG_ACTIVITY_NO_HISTORY
FLAG_ACTIVITY_REORDER_TO_FRONT
FLAG_ACTIVITY_SINGLE_TOP
Intent 创建 Tab页
TabActivity来创建Activity布局,添加Tab页使用TabHost.TabSpec
setContent(int viewId)
setContent(Intent intent)
小结:
本章内容主要介绍了Intent的功能和用法——启动某个组件的“意图”,掌握常用属性以及在AndroidManifest中配置<intent-filter.../>.
今日分享:
为了快速愈合,我们从自己身上剥夺了太多东西。以致在三十岁时,自己的感情就已破产。每开始一段新的感情,我们能给予的便越少,但是为了让自己不要有感觉而不去感觉,多么浪费。