1
安卓应用开发案例教程
1.6.3.2 3.3.2 Intent
3.3.2 Intent

只有一个Activity的应用程序肯定不是最终目标,应该有更高的追求。作为四大模块的枢纽,Intent是Android通信的桥梁。

图3-13 程序运行效果

R3-1 手动创建Activity

Intent又分为显式Intent和隐式Intent,显式Intent通过组件名指定启动的目标组件,比如“startActivity(new Intent(A.this,B.class));”,每次启动的组件只有一个;隐式Intent不指定组件名,而指定Intent的Action、Data或Category,当启动组件时,会匹配“AndroidManifest.xml”相关组件的Intent-filter,逐一匹配出满足属性的组件,当不止一个满足时,会弹出一个让用户选择启动哪个的对话框。

Intent所包含的主要信息为ComponentName和Action。

ComponentName又称组件名称,指定Intent的目标组件的类名称。组件名称是可选的,如果设置,Intent对象会发送指定组件名称的组件,否则也可以通过其他Intent信息定位到适合的组件。组件名称是个ComponentName类型的对象。代码如下:

Action指的是Activity可以执行的动作,该标识用来说明Activity可以执行哪些动作,所以当隐式Intent传递过来Action时,如果跟这里所列出的任意一个匹配,就说明这个Activity是可以完成这个Intent的意图的,可以将它激活。常用的Action如下:

(1)ACTION_CALL activity:启动一个电话;

(2)ACTION_EDIT activity:显示用户编辑的数据;

(3)ACTION_MAIN activity:作为Task中第一个Activity启动ACTION_SYNC activity同步手机与数据服务器上的数据;

(4)ACTION_BATTERY_LOWb roadcas treceiver:电池电量过低警告;

(5)ACTION_HEADSET_PLUG broadcas treceiver:插拔耳机警告;

(6)ACTION_SCREEN_ON broadcas treceiver:屏幕变亮警告;

(7)ACTION_TIMEZONE_CHANGED broadcas treceiver:改变时区警告。

不管创建多少个Activity,方法跟前面介绍的都是一样的,唯一的不同就是需要设置哪一个Activity是应用程序的主Activity。那么怎么样才能在主Activity和其他Activity之间自由穿梭呢?

首先,新建一个“second_layout.xml”布局文件,代码如下:

在这个布局文件里,同样定义了一个按钮,按钮上的文字显示为“Button2”。接下来新建一个名为“SecondActivity”的Activity,它同样继承自Activity,代码如下:

最后为SecondActivity在“AndroidManifest.xml”文件中注册,代码如下:

可以看到SecondActivity里没有配置<intent-filter>标签,这是因为这个Activity并不是主Activity。到这里,就可以引入Intent这个全新的概念了。

通过解析各种Intent,从一个屏幕导航到另一个屏幕是很简单的。在Intent的多个构造函数中,其中一个是Intent(Context packageContext,Class<?>cls)。这个构造函数接收两个参数,第一个参数Context提供一个启动活动的上下文,第二个参数Class指定想要启动的目标Activity。通过这个构造函数就可以构建出Intent的“意图”。换句话说就是“从哪来,往哪去”,第一个参数表明了“从哪来”,也就是意图是想从哪个Activity出发,第二个参数指定了“往哪去”,也就是意图需要跳转到哪个Activity。Activity类中会调用一个startActivity()方法,这个方法专门用来启动Activity,它接收一个Intent类型的参数,这里将刚才构建好的Intent传入startActivity()方法即可以启动目标Activity了。

下面修改FirstActivity中按钮的点击事件,代码如下:

从代码中可以看到,首先构建了一个Intent,“从哪来”传了FirstActivity.this作为上下文,“往哪去” 传入SecondActivity.class作为目标Activity,这样意图就完整了,也就是要从FirstActivity这个活动打开SecondActivity这个活动,然后通过startActivity()方法执行这个Intent。重新运行后,就可以通过点击FirstActivity界面上的按钮启动SecondActivity活动,结果如图3-14所示。

图3-14 SecondActivity界面

到这里,已经成功启动了SecondActivity这个Activity。如果想要回到上一个Activity,应该怎么做呢?其实很简单,只需要按Back键就可以销毁当前Activity,返回上一个Activity。