您的位置:首页 > 编程语言 > Go语言

Intent

2017-05-15 13:55 183 查看
Intent封装了Android应用需要启动某个组件(Activity、Service、BroadcastReceiver)的“意图”,不仅如此,Intent还是应用程序组件之间通信的重要媒介(使用Intent携带Bundle对象)
使用Intent启动不同组件的方法:
startActivity、startActivityForResult、startService、bindService、sendBroadcast
Intent对象大致包含Component、Action、Category、Data、Type、Extra和Flag这七种属性,其中,Component用于明确指定需要启动的目标组件,而Extra则用于携带需要交换的数据
Intent的Component属性需要接受一个ComponentName对象,ComponentName对象包含如下几个构造器:
ComponentName(String pkg,String cls)
ComponentName(Context pkg,String cls)
ComponentName(Context pkg,Class<?> cls)
上面构造器的本质就是:创建一个ComponentName需要指定包名和类名,这就可以唯一确定一个组件类,除此之外,Intent还包含了如下三个方法:setClass、setClassName、setClassName
指定Component属性的Intent已经明确了它将要启动哪个组件,因此这种Intent也被称为显示Intent,否则称为隐式Intent
ComponentName comp = new ComponentName(a.this,b.class);
Intent intent = new Intent();
intent.setComponent(comp);
可以简化为:Intent intent =  new Intent(a.this,b.class);
Intent的Action、Category属性都是一个普通的字符串,其中Action代表该Intent所要完成的一个抽象动作,而Category则用于Action增加额外的附加类别信息,通常Action属性会与Category属性结合使用,最终启动哪个组件,取决于<intent-filer/>元素的配置
<intent-filter/>元素里通常包含如下子元素:
0到N个<action/>子元素
0到N个<category/>子元素
0到1个<data/>子元素
一个Intent对象最多只能包含一个Action属性,程序可以调用Intent的setAction方法来设置Action属性值,但一个Intent对象可以包含多个Category属性,可以调用Intent的addCategory来添加
当程序创建Intent时,该Intent默认启动Category属性值为Intent.CATEGORY_DEFAULT常量(android.intent.category.DEFAULT)
Intent代表了启动某个程序组件的“意图”,实际上Intent对象不仅可以启动本应用内程序组件,也可以启动Android系统的其他应用的程序组件,包括系统自带的程序组件,Android内部提供了大量标准Action、Category常量
startActivity -- intent(Intent.ACTION_MAIN、Intent.CATEGORY_HOME)返回桌面
Data属性通常用于向Action属性提供操作的数据,Data属性接受一个Uri对象,一个Uri对象通常通过如下形式的字符串来表示:scheme://host:port/path
Type属性用于指定该Data所指定Uri对应的MIME类型,这种MIME类型可以是任何自定义的MIME类型,只要符合abc/xyz格式的字符串即可
Data属性与Type属性会相互覆盖,如果希望Intent既有Data属性,也有Type属性,应该调用Intent的setDataAndType方法
在AndroidManifest.xml文件中为组件声明Data、Type属性都通过<data/>元素,mimeType用于声明该组件所能匹配的Intent的Type属性,scheme用于声明该组件所能匹配的Intent的Data属性的scheme部分,host、port、path、pathPrefix、pathPattern
Intent的Type属性必须与<data/>子元素的mimeType属性相同,才能启动该组件
Intent的Data属性并不要求android:scheme、android:host、android:port、android:path完全匹配只有一个Intent同时匹配action、category、data类别才算完全匹配,完全匹配才能成功启动目标Activity,一个过滤规则中可以有多个action,只要Intent中的action能够和过滤规则中的任何一个action相同即可匹配成功,action要求Intent中必须有一个action且必须能够和过滤规则中的某个action相同,而category要求Intent可以没有category,但是如果你一旦有category,不管有几个,每个都要能够和过滤规则中的任何一个category相同data由两部分组成,mimeType和URI,如果URI中没有指定scheme,那么整个URI的其他参数无效,如果host未指定,那么整个URI中的其他参数无效,这意味着URI是无效的,仅当URI中指定了scheme和host参数的时候port参数才是有意义的下面两种写法,作用相同<data android:scheme=“file”android:host=”www.baidu.com”/> <data android:scheme=“file”/><data android:host=”www.baidu.com”/>
Extra属性通常用于在多个Action之间进行数据交换,Intent的Extra属性值应该是一个Bundle对象,Buidle对象就像一个Map对象,它可以存入多组key-value对
Flag属性:Intent.FLAG_ACTIVITY_CLEAR_TOP、Intent.FLAG_ACTIVITY_NEW_TASK
Intent.FLAG_ACTIVITY_SINGLE_TOP:与加载模式singleTop功能相同
Intent.FLAG_ACTIVITY_CLEAR_TOP销毁目标Activity和它之上的所有Activity,重新创建目标Activity
Intent.FLAG_ACTIVITY_NEW_TASK
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息