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()方法来添加控制旗标。