首页 > 代码库 > 使用Intent和IntentFilter进行通信

使用Intent和IntentFilter进行通信

Intent的中文翻译就是“意图”。Android使用Intent来封装程序的调用意图。使用intent会提供统一的编程模型,而且能起到解耦合的作用。

使用Intent对象启动系统组件的方法:

startActivity(Intent intent)

startActivityForResult(Intent intent,int requestCode)

startService(Intent intent)

bindService(Intent intent,ServiceConnection conn,int flags)

sendBroadcast(Intent intent)

sendStickyBroadcast(Intent intent)等等

 

Intent对象常用属性

Intent对象由以下六个部分组成:

Component

Action

Data

Category

Extras

Flags

Intent寻找目标组件的两种方法

第一种:显式调用,通过Component属性直接指定;

指定了Component属性的Intent对象就已经明确了要启动哪一个组件,几乎不用在<intent-filter…>中配置,因此这种Intent也被成为显式Intent。

ComponentName com = new ComponentName("com.antroid.Test", "com.android.Test.TestActivity"); Intent  intent = new Intent(); intent.setComponent(com); startActivity(intent);
ComponentName comp =getIntent.getComponent();  //在目标页面查询ComponentName的信息Log.v("msg",comp.getPackageName+"  "+comp.getClassName);

 

 

第二种:隐式调用,没有明确指定目标组件的名称,那么就要通过一定的条件过滤筛选。

我们通过在<intent-filter…/>中配置以下属性:

0~N个<action…/>

0~N个<category…/>

0~1个<data…/>

 

1、Action

Action是指Intent要完成的动作,是一个字符串常量。在Intent类里面定义了很多Action常量,其中有:

如intent.setAction(Intent.ACYION_CALL);

当然也可以自己定义Action常量,自定义的常量需要加上你的应用的包名作为前缀。

当包含多个Action元素时,就表示Activity能够响应Action属性值为其中任意一个字符串的Intent.

 

2、Category

Category也是一个字符串,提供了额外的信息。Intent类中也定义了一些Category常量:

 

需要注意的是:每个<intent-filter…/>组件中能包含多个<action…/>和<category…/>子元素。而每个Intent对象只能指定一个Action要求,但可以指定多个Category要求.只要组件满足的要求大于或等于Intent指定的要求,那么该Intent就能启动该组件。

如果某个Intent对象并未指定Category属性,则该Intent对象默认启动Category属性值为Intent.CATEGORY_DAFULT的组件。

 

3、Data

Data属性通常用于向Action属性提供操作的数据。Data属性接受一个URI对象。比如,Action是ACTION_EDIT时,数据域将是文档的URI;Action是ACTION_CALL时,数据域是 tel: URI ,带有要拨打的电话号码;如果Action是 ACTION_VIEW,则数据域是http: URI。

如·:http://www.baidu.com    tel:13800138000

 

4、Extra属性

用于在多个Action之间进行数据交换,可以携带Bundle对象

使用Intent和IntentFilter进行通信