3.2 Intent的使用

3.2.1 Intent浅析

在Android系统中,组件之间的通信需要使用到Intent。Intent中文翻译为“意图”,Intent最常用的是绑定应用程序组件,并在应用程序之间进行通信。它一般用于启动Activity、服务、发送广播等,承担了Android应用程序三大核心组件之间的通信功能。

使用Intent开启Activity时,对应的方法为startActivity(Intent intent)和startActivityForResult(Intent intent);开启Service时,常用的有ComponentName startService(Intent intent)和boolean bindService(Intent service, ServiceConnection conn, int flags);开启BroadcastReceiver方法有多种,就不一一列举了。

Android中使用Intent的方式有两种,分别为显式Intent和隐式Intent,接下来将在3.2.2节和3.2.3节详细介绍这两种方式。

3.2.2 显式Intent

显式Intent就是在通过Intent启动Activity时,需要明确指定激活组件的名称,例如通过一个Activity启动另外一个Activity时,就可以通过这种方式,具体的代码如下:

     //创建Intent对象,指定启动的类名SecondActivity
     Intent intent=new Intent(MainActivity.this,SecondActivity.class);
     //启动Activity
     startActivity(intent);

通过上述代码可以看出,使用显式Intent时,首先需要通过Intent的构造方法来创建Intent对象。构造方法有两个参数,分别为启动Activity的上下文和需要启动的Activity类名。除了通过指定类名的方式启动组件外,显式Intent还可以根据目标组件的包名、全路径来指定开启的组件。具体的代码如下所示:

     //setClassName("包名","类的全路径名称");
     intent.setClassName("com.jxust.cn","com.jxust.cn.chapter_shengtime");
     //启动Activity
     startActivity(intent);

Activity类提供了startActivity(Intent intent)方法,该方法专门用于启动Activity,它接受一个Intent参数,然后通过将构建好的Intent参数传入方法里来启动Activity。

使用这两种方式启动Activity,能够在程序中很清晰地看到,其“意图”很明显,因此称为显式Intent。

3.2.3 隐式Intent

在程序中没有明确指定需要启动的Activity,Android系统会根据在Androidmanifest.xml文件中设置的动作(action)、类别(category)、数据(Uri和数据类型)来启动合适的组件。具体代码如下所示:

在上述代码中,<action>标签指定了当前Activity可以响应的动作为android.intent.action.MAIN,而<category>标签则包含了一些类别信息,只有当这两者中的内容同时匹配时,Activity才会启动。使用隐式Intent启动Activity的具体代码如下:

通过以上的学习,已经初步了解了显式Intent和隐式Intent的使用。显式Intent启动组件时必须要指定组件的名称,一般只在本应用程序切换组件时使用。而隐式Intent使用的范围更广,不仅可以启动本应用程序内的组件,还可以开启其他应用的组件,如打开系统的照相机、图库等。