java Intent简介

一种通讯机制。

Intent 简介

Android 中提供了 Intent 机制来协助应用间的交互与通讯,Intent 负责对应用中一次操作的动作、动作涉及数据、附加数据进行描述,Android 则根据此 Intent 的描述,负责找到对应的组件,将 Intent 传递给调用的组件,并完成组件的调用。Intent 不仅可用于应用程序之间,也可用于应用程序内部的 Activity/Service 之间的交互。因此,Intent 在这里起着一个媒体中介的作用,专门提供组件互相调用的相关信息,实现调用者与被调用者之间的解耦。Intent 分为两类:显式 Intent 和 隐式 Intent。

显式 Intent

显式 Intent 有以下三种通信方式。

  1. 我们可以在 Activity 的 java 文件中,通过代码显示定义 Intent ,参数为:当前页面,跳转页面。格式如下:
1
2
Intent intent = new Intent(FirstActivity.this, SecondActivity.class);
startActivity(intent);
  1. 我们可以通过 putExtra(key, value) 的方法,往 Intent 传入数据,携带到跳转目标页。
1
2
3
Intent intent = new Intent(FirstActivity.this, SecondActivity.class);
intent.putExtra(name, data);
startActivity(intent);

在跳转目标页到 java 文件后,通过 getIntent() 提取链接到该 Activity 的 Intent 实例,然后通过 intent 实例的 getXxxExtra(name) 提取数据,其中 Xxx 指数据类型。

  1. 也可以在跳转发起页获取到跳转目标页回传的数据。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
/* 跳转发起页 */

Intent intent = new Intent(FirstActivity.this, SecondActivity.class);
startActivityForResult(intent, 1);//第一个参数是intent,第二个是请求码

//重写结果回传函数,监听结果码以及回传的intent
//第一个参数:请求码:用于校验是否该页面发起的跳转请求的回传结果
//第二个参数:结果码:回传的结果码类型
//第三个参数:Intent实例:跳转目标页通过一个intent来携带数据,返回发起页。
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
switch (requestCode) {//根据请求码来匹配是哪个跳转请求的回传结果
case 1:
if(resultCode == RESULT_OK) {//根据结果码,执行不同结果码对应的操作
String name = "return_data";
String returnData = data.getStringExtra(name);//通过回传的intent提取数据
......//使用数据:赋值给变量、调用其他函数、赋值给视图控件等
}
break;
default:
}
}


/* 跳转目标页 */
Intent intent1 = new Intent();//创建回传的intent实例
intent1.putExtra(name, data);//携带数据
setResult(RESULT_OK, intent1);//作为结果进行回传

隐式 Intent

隐式 Intent 可理解为配置式的 Intent :在 Manifest 文件中注册 Activity 时,通过 \ 标签下配置 \ 的内容,指定当前活动能够响应的 Action 和 Category。由系统自己去分析这个某一个 Intent 实例,然后在 manifest.xml 配置好的众多 activity 中帮我们找出最合适的 Activity 去启动

其中配置的内容包括动作(Action)、类型(Category)、数据(Data)。

条件 作用 匹配规则
动作(Action) 指明要实施的动作。 Intent 中的一个 Action 与 \ 其中一个 Action 匹配即可。
类型(Category) 指明处理该 Intent 的组建的种类信息。 任何一个都必须与 \ 中的任意一个相同。
数据(Data) 指明媒体类型(mimeType)、URL地址。 Intent 中的任何一个 Date 与 \ 其中一个 Data 匹配即可。

在实现时,我们在跳转发起页的 java 代码中,创建一个 intent 实例,然后为它指定 Action、Catagory、Data等,然后使用该 Intent 来进行启动跳转。由 Android 自身通过 Action、Catagory、Data 等属性在 manifest 中寻找匹配的Actvity来进行启动。

1
2
3
4
Intent intent = new Intent("com.example.jared.activitystudy.ACTION_START");//使用action值作为参数创建intent
intent.addCategory("com.example.jared.activitystudy.MY_CATEGORY");//为其添加catagory值
intent.setData(Uri.parse(""));//为其设置数据,用于携带。【数据的类型需匹配隐式intent中定义好的格式】
startActivity(intent);//启动
感谢您的支持
-------------本文结束感谢您的阅读-------------