《Intent详解(一):显式Intent》
《Intent详解(二):隐式Intent》
《Intent详解(三):Intent的Flags》
《Intent详解(四):使用隐式Intent》

Intent简介

Intent是Android中用来传递消息的组件,启动Activity、Service、BroadcastReceiver都离不开Intent。

在之前的Activity详解教程中我们使用过Intent,最简单的Intent用法如下:

// 创建Intent对象Intent intent = new Intent(ActivityA.this, ActivityB.class);startActivity(Intent);

上面的代码是最简单的Intent应用情况,首先我们通过new创建一个Intent对象,两个参数分别制定了从ActivityA要跳转到ActivityB,然后将Intent对象传递给Activity的startActivity方法,系统就会根据这个Intent的信息来启动对应的组件了。

上面的例子太简单,体现不出来Intent的实例,接下来我们就详细的了解一下Intent到底都能干什么。

Intent分类

Intent分为两种类型:

  • 显式Intent:按名称(完全限定类名)指定要启动的组件。通常,您会在自己的应用中使用显式 Intent 来启动组件,这是因为您知道要启动的 Activity 或服务的类名。例如,启动新 Activity 以响应用户操作,或者启动服务以在后台下载文件。
  • 隐式Intent:不会指定特定的组件,而是声明要执行的常规操作,从而允许其他应用中的组件来处理它。例如,如需在地图上向用户显示位置,则可以使用隐式 Intent,请求另一具有此功能的应用在地图上显示指定的位置。

Intent分为上面两种类型,但是从上述的描述中我们还是看不出具体Intent的用法和相关细节。我们就上面两种类型来一一讲解。

显式Intent

我们先来看看Intent的所有构造方法,如图所示:

公共的构造方法一共有如上六个,其中我们在显式Intent中常用的有1、2、5这三个。

显式Intent比较简单,主要的特点就是要指定要启动组建的信息(包名、类名)。下面我们就通过几种不同构造Intent的方式来演示一下显式Intent的用法。

1)Intent()

// 使用无参数构造构建Intent对象Intent intent = new Intent();// 设置要启动组件的信息intent.setClass(ActivityA.this, ActivityB.class);// 传递数据intent.putExtra("data", "StringData");startActivity(intent);

这里我们是调用的setClass方法来指定要启动组件的信息的。这个方法的参数与方式三构造中的参数一样。

2)Intent(Intent o)

// 使用无参数构造构建Intent对象Intent intent = new Intent();// 设置要启动组件的信息intent.setClass(ActivityB.this, ActivityB.class);// 传递数据intent.putExtra("data", "StringData");// 使用一个已经构建好的Intent构建新的IntentIntent intent1 = new Intent(intent);startActivity(intent);

3)`Intent(Context packageContext, Class<?> cls)

// 创建Intent对象时指定要启动组件的信息Intent intent = new Intent(ActivityA.this, ActivityB.class);intent.putExtra("data", "StringData");startActivity(intent);

我们看到上面的方式大同小异,区别只是指定要启动组件信息的方式或方法不同,相同的确实不管用什么方式来构建Intent都要指定要启动组件的信息,因为系统会根据这些信息去启动对应的组件。

我们看到上面的例子中我们调用了putExtra方法,这个方法是传送数据使用的,例如我们要在ActivityA传送一些数据到ActivityB,那么我们就可以使用Intent提供的一些putExtra方法。如图所示:

我们看到Intent提供了很多重载的putExtra方法,通过场面的方法我们可以传送所有的基本数据类型、String类型、序列化对象、数组等类型数据。

其中的有一个参数为Bundle,关于Bundle我们后续有专门文章讲解,这里我们只需要知道Bundle也可以传递数据即可,使用Bundle传递数据代码如下:

// 创建Intent对象时指定要启动组件的信息Intent intent = new Intent(ActivityA.this, ActivityB.class);// 创建一个Bundle对象Bundle bundle = new Bundle();// 携带一个int类型的数据key为num,value为110bundle.putInt("num", 110);// 绑定bundleintent.putExtras(bundle);// 启动组件startActivity(intent);  在ActivityB中使用如下代码获取Bundle中的数据:// 获取IntentIntent intent1 = getIntent();// 获取Intent中的BundleBundle bundle1 = intent1.getExtras();// 获取bundle中的数据int num = bundle1.getInt("num");

这里我们总结一下使用Intent传递数据的具体步骤:

1)构建Intent,并指定要启动组件的信息。

2)调用Intent的putExtra方法指定key-value。如果使用Bundle则先创建Bundle对象,然后调用Bundle的put系列方法指定key-value,然后在调用Intent的putExtras方法,将Bundle传递进去即可。

3)调用Activity的startActivity方法传入构件好的Intent即可启动其他组件。

4)在被启动的组件中调用getIntent()方法获取Intent对象,(这里只针对Activity,其他的组件我们后续其他文章讲解)这个Intent对象就是我们上面构件好的Intent,其中携带者我们想要的数据。

5)调用intent的get系列方法并指定key,这里的key与第二步中的key必须一致。获取数据。

一般情况下使用显示Intent就使用上述步骤即可。关于显示Intent我们就讲到这里,我们接下来重点讲解隐式Intent。

更多相关文章

  1. Android启动过程图解
  2. mldn andoird
  3. Android——Framework目录分析及系统启动过程以及目录简介
  4. android一键退出
  5. 大话Fragment管理
  6. 【自定义View系列】android的UI结构
  7. 关于Android(安卓)Studio开发环境变量的设置(avd启动黑屏)
  8. Android开发中的优化方案
  9. Android中四大组件概述以及各自作用

随机推荐

  1. Android手机拨打电话、手动发送短信与自
  2. Android源码博文集锦1
  3. Android 打包过程
  4. android中dialog加工后的例子
  5. Android 系统编译移除应用
  6. [Android实例] Android实现开机自动运行
  7. Android支持的图片格式
  8. Android 高级混淆和代码保护技术
  9. android开发之启动模拟器并安装游戏apk
  10. Handler发送消息的方式