Android学习笔记(47):使用Intent和IntentFilter进行通信

Android中Activity、Service、BroadcastReceiver都是依靠Intent启动的,Intent封装了程序想要启动程序的意图,还可以用于与被启动组件交换信息。

 

使用Intent启动不同组件的方法:

组件类型

启动方法

Activity

startActvity( )

startActivity( )

Service

startService( )

bindService( )

BroadcastReceiver

sendBroadcasts( )

sendOrderedBroadcasts( )

sendStickyBroadcasts( )

 

Intent的属性:

Intent对象包含如下7种的属性:

动作(Action)、数据(Data)、分类(Category)、类型(Type)、组件(Component)、扩展信(Extra)、控制旗标(Flag)。

其中最常用的是Action属性和Data属性。

 

Component属性:

Component接受一个ComponentName对象,ComponentName对象有如下几个构造器:

ComponentName(String pkg,String cls)

ComponentName(Context pkg,String cls)

ComponentName(Context pkg,Class<?>cls)

其中,pkg包名,cls类名。

 

Intent还包含如下三个方法,用于设置将要启动的组件:

setClass(Context packageContext,Class<?>cls)

setClassName(Context packageContext,String className)

setClassName(String packageName,String className)

 

显式Intent与隐式Intent:

指定Component属性已经明确它要启动哪个组件,为显式Intent。没有明确Component属性的,为隐式Intent,应用将会根据Intent指定的规则去启动符合条件的组件。

 

下面两种指定启动组件的代码是一样的功能:

1.

Intent intent = new Intent(); 
ComponentName cn = newComponentName(HelloActivity.this,"com.byread.activity.OtherActivity"); 
intent.setComponent(cn); 
startActivity(intent);

2.

Intent intent = new Intent(); 
intent.setClass(HelloActivity.this,OtherActivity.class); 
startActivity(intent);

Action与Category属性与intent-filter配置

Action和Category都为普通字符串。Action代表该Intent所要完成的一个抽象动作,Category用于为Action增加额外的附加类别信息,两者一般结合使用。

Action要完成一个抽象动作,这个动作具体由哪个组件完成,取决于Activity的<intent-filter…/>配置。

<intent-filter…/>是<activity…/>的子元素,用于配置该Activity所能响应的Intent。

<intent-filter…/>可以包含:

0到N个<action…/>子元素

0到N个<category…/>子元素

0到1个<data…/>子元素

 

Action属性常量:

ACTION_MAIN:Android Application的入口,每个Android应用必须且只能包含一个此类型的Action声明。 

ACTION_VIEW:系统根据不同的Data类型,通过已注册的对应Application显示数据。

ACTION_EDIT:系统根据不同的Data类型,通过已注册的对应Application编辑示数据。 

ACTION_DIAL:打开系统默认的拨号程序,如果Data中设置了电话号码,则自动在拨号程序中输入此号码。 

ACTION_CALL:直接呼叫Data中所带的号码。 

ACTION_ANSWER:接听来电。 

ACTION_SEND:由用户指定发送方式进行数据发送操作。

ACTION_SENDTO:系统根据不同的Data类型,通过已注册的对应Application进行数据发送操作。 

ACTION_BOOT_COMPLETED:Android系统在启动完毕后发出带有此Action的广播(Broadcast)。 

ACTION_TIME_CHANGED:Android系统的时间发生改变后发出带有此Action的广播(Broadcast)。 

ACTION_PACKAGE_ADDED:Android系统安装了新的Application之后发出带有此Action的广播(Broadcast)。 

ACTION_PACKAGE_CHANGED:Android系统中已存在的Application发生改变之后(如应用更新操作)发出带有此Action的广播(Broadcast)。 

ACTION_PACKAGE_REMOVED:卸载了Android系统已存在的Application之后发出带有此Action的广播(Broadcast)。  

Category属性常量:

CATEGORY_DEFAULT:Android系统中默认的执行方式,按照普通Activity的执行方式执行。 

CATEGORY_HOME:设置该组件为Home Activity。

CATEGORY_PREFERENCE:设置该组件为Preference。 

CATEGORY_LAUNCHER:设置该组件为在当前应用程序启动器中优先级最高的Activity,通常为入口ACTION_MAIN配合使用。 

CATEGORY_BROWSABLE:设置该组件可以使用浏览器启动。 

CATEGORY_GADGET:设置该组件可以内嵌到另外的Activity中。

 

Data与Type属性与intent-filter配置

Data属性通常用于向Action属性提供操作的数据,Data属性接受一个Uri对象。

Type属性用于指定该Data属性所指定Uri对应的MIME类型(多用途互联网邮件扩展类型)。MIME类型可以是任何自定义的MIME类型,只要符合abc/xyz格式的字符串即可。

Data与Type属性分别先后设置后,后面设置的属性会覆盖前面的属性,希望同时设置,需要调用Intent的setDataAndType()方法。

 

使用Action和Data属性启动系统Activity

一旦为Intent指定了Action、Data属性,Android就可以根据指定的数据类型来启动特定的应用程序。

 

Extra属性:

是一个Bundle对象,用于在多个Bundle之间进行数据交换。

 

Flag属性:

为Intent添加一些额外的控制旗标,Intent可调用addFlag()方法来添加控制旗标。

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

这波lucio来全学了

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值