android-初识意图

一、意图(Intent)的作用

意图的作用主要由两个,激活组件和传递数据。作为android系统的核心消息传递机制,android应用程序的三大组件Acitivity、service和Broadcase Receiver都是由意图来激活的。

二、意图的使用方法

意图包括了显式意图和隐式意图。

1、  显式意图的使用

1)利用意图跳转到其他活动并传递数据

Activity1:

Intent intent=new Intent(this, Activity2.class);//第一个参数是Context对象,而Activity就是Context类的子类,第二个类是要跳转(启动)的组件。

//Intent.putExtra(“username”,”baobao”);//传递数据的第一种方式,传递一个键值对

Bundle bundle=new Bundle();//传递数据的第二种方式,bundle相当于一个map对象,可以传递多个键值对

Bundle.putString(“username”,”baobao”);

Intent.putExtras(bundle)

StartActivity(intent);//发送意图

Activity2:

Intent intent=this.getIntent();//获得意图

//Intent.getStringExtra(“username”);//对应上述第一种方式

Intent.getExtras.getString(“username”);//对应上述的第二种方式

2)利用意图跳转到其他活动并返回结果

有时候,我们不仅仅希望A活动跳转到B活动,还希望在B活动结束后,返回一些处理数据给A。只需要在发送意图时调用StartActivityResult(intent,0);

其中第一个参数是要发送的意图,第二个参数是标示A活动的int型数据。因为A和B并不是一对一的,A可能会跳转到多个活动,B也可能由多个活动跳转而来,双方都需要一个标示码。

A. startActivityResult(intent,0);//此处向B传递一个requestCode=0

B. 获得intent处理相应业务。。。

Intent result=new Intent();//此处intent对象并不用来启动组件,仅仅用来返回数据

Result.putExtra(“result”,”ok”);

setResult(RESULT_OK,result);//第一个参数是一个标示B的标识码,result是返回的数据

finish();

A.  B活动通过调用setResult()方法返回到父活动A,onActivityForResult(int requestCode,int resultCode,intent data)这个回调方法会被自动调用,需要验证requestCode是否等于A发送请求时的requestCode,resultCode是否是B活动设置的,验证成功可以获得数据进行下一步处理。

2、  隐式意图的使用

隐式意图在创建时并不指定要启动的组件,而是由系统解析而获得可以响应该意图的所有组件。

1)  意图过滤器(intent-filter)描述了一个组件愿意或者能够处理什么样的意图。通过三个方面来描述这个意图是什么样的。即意图的动作的名字(action),什么种类(catagory)的意图,意图所要操作的数据(data)时什么类型的。

Action:该组件可以处理的意图的动作(浏览->android.intent.action.VIEW)的名称。每个组件应该至少有一个action结点。不然没有意图恩能够和该组件匹配。

Category:该组件可以处理的意图的种类。该组件可以处理什么种类的意图,在这个结点列出,其他种类的意图,无法处理。

Data:该组件可以处理什么样的数据,如果意图的数据类型不在结点所申明的范伟雷,则无法处理。

解析的大致过程:

当意图没有指定要启动的组件时,系统会根据所有应用的项目清单文件找到所有含有intent-filter结点的组件的集合。首先会遍历这个组件集合匹配action结点,如果该意图的所有action都能在某组件的action结点中找到,则暂时认为该组件能处理该意图。删除不能处理该意图的组件,匹配category,如果该意图的所有category都能在某组件的category结点中找到,则暂时认为该组件能处理该意图。最后匹配data,如果意图的数据类型该组件能够处理,则认为该组件能处理该意图。最后如果没有组件能处理该意图,则抛出异常;有多个组件能处理该意图,则返回一个列表供用户选择。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值