前言
Intent 是 Android 非常常用的一个用于组件间互相通信的信息对象,常用于启动组件和传递数据(在Activity之间,在Activity和Service之间,在Activity和Broadcast之间)。Intent 主要分为显式 Intent 和隐式 Intent,另外在Android 5.0之后的系统, Service 只能通过显式 Intent 启动,同时启动 Service 时,应始终指定组件名称,否则会报错。
元素名称 | 设置方法 | 说明 |
---|---|---|
Component | setComponent() | 指定Intent的来源和目的 |
Action | setAction() | 指定Intent发向的组件的主要动作 |
Data | setData() | 指定动作要操纵的数据路径 |
Category | addCategory() | 指定目标组件的类型 |
Type | setType() | 指定Data类型的定义 |
Extra | putExtra() | 指定Intent 携带附加数据,也是组件间互相传递信息比较常见的做法 |
Flag | setFlag() | 指定启动方式 |
一、显式Intent
声明一个Intent对象时,要指定两个参数,分别是跳转的来源页面和接下来要跳转到的页面类。具体声明方法:
// 调用构造函数直接创建Intent
Intent intent = new Intent(this, ResponseActivity.class);
// 调用setClass方法
Intent intent1 = new Intent();
intent1.setClass(this, ResponseActivity.class);
// 调用setComponent方法
Intent intent2 = new Intent();
ComponentName componentName = new ComponentName(this, ResponseActivity.class);
intent2.setComponent(componentName);
二、隐式Intent
1.使用方法
如果不希望直接暴露源码类名,可以事先定义好动作名称,让系统去模糊匹配。这个动作名称可以是自己定义的,也可以是系统已有的,系统动作取值说明:
这个动作名称通过setAction方法指定,也可以直接通过构造函数生成,另外由于是通过模糊匹配,可以使用setData和addCategory方法来给定详细的路径
Intent intent3 = new Intent();
// 使用系统动作,直接拨号
intent3.setAction(Intent.ACTION_CALL);
String phone = "";
Uri uri = Uri.parse("tel: " + phone);
intent3.setData(uri);
startActivity(intent3);
2.配置过滤器
AndroidManifest.xml里面的intent-filter就是xml的过滤器,如下是在主页面常见的Action和Category的过滤条件