Intent是各个组件之间信息沟通的桥梁,它用于Android各组件之间的通信,主要完成下列工作:
1、标明本次通信请求从哪里来,到哪里去,要怎么走。
2、发起方携带本次通信需要的数据内容,接收方从收到的意图中解析数据。
3、发起方若想判断接收方的处理结果,意图就要负责让接收方传回应答的数据内容。
1、显式Intent
直接指定来源活动与目标活动,属于精准匹配,有三种构建方式:
- 在Intent的构造函数中指定。
Intent intent = new Intent(this,NotificationActivity.class);
startActivity(intent);
- 调用意图对象的setClass方法指定。
Intent intent = new Intent();
intent.setClass(this,NotificationActivity.class);
startActivity(intent);
- 调用意图对象的setComponent方法指定。
Intent intent = new Intent();
ComponentName component = new ComponentName(this,NotificationActivity.class);
intent.setComponent(component);
startActivity(intent);
2、隐式Intent
没有明确指定要跳转的目标活动,只给出一个动作字符串让系统自动匹配,属于模糊匹配。
- 在程序中调用系统程序拨号界面
String phoneNo = "12345";
Intent intent = new Intent();
//设置动作意图为准备拨号
intent.setAction(Intent.ACTION_DIAL);
//声明一个拨号的uri
Uri uri = Uri.parse("tel:" + phoneNo);
intent.setData(uri);
startActivity(intent);
- 在程序中调用系统程序拨号界面
String phoneNo = "12345";
Intent intent = new Intent();
//设置动作意图为发短信
intent.setAction(Intent.ACTION_SENDTO);
//声明一个发短信的uri
Uri uri = Uri.parse("sms:" + phoneNo);
intent.setData(uri);
startActivity(intent);
- 跳转到另外一个活动
Intent intent = new Intent();
intent.setAction("com.zyw.demo.ACTION_START");
intent.addCategory(Intent.CATEGORY_DEFAULT);
startActivity(intent);
3、使用Intent向下一个Activity发送数据
步骤如下:
- 创建一个Intent对象,设置Intent的目标Activity和需要传递的数据。
Intent intent = new Intent(context, TargetActivity.class);
intent.putExtra("key", "value");
- 调用startActivity方法启动目标Activity,并将Intent传递给该方法。
startActivity(intent);
- 在目标Activity中获取传递过来的数据。
Intent intent = getIntent();
String value = intent.getStringExtra("key");
以上就是使用Intent向下一个Activity发送数据的完整流程。需要注意的是,传递的数据类型可以是基本数据类型、字符串、序列化对象等。同时要确保传递的数据在目标Activity中可以正确获取和处理。
4、返回数据给上一个活动
步骤:
- 在启动下一个活动时,使用 startActivityForResult() 方法代替 startActivity() 方法来启动活动。例如,假设当前活动是 Activity A,我们希望启动 Activity B 并返回数据给 Activity A,代码如下:
Intent intent = new Intent(ActivityA.this, ActivityB.class);
startActivityForResult(intent, REQUEST_CODE);
其中,REQUEST_CODE 是一个整型常量,用于标识返回结果的来源。
- 在 Activity B 中,在需要返回数据的地方,创建一个 Intent 对象,并在其中添加要返回的数据。然后,调用 setResult() 方法将 Intent 对象返回给上一个活动。例如:
Intent resultIntent = new Intent();
resultIntent.putExtra("data", "返回的数据");
setResult(RESULT_OK, resultIntent);
finish();
其中,"data" 是要返回的数据的键名,"返回的数据" 是要返回的数据的值。
- 在 Activity A 中,覆盖 onActivityResult() 方法,获取从 Activity B 返回的数据。例如:
@Override
protected void onActivityResult(int requestCode, int resultCode, @Nullable Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if (requestCode == REQUEST_CODE && resultCode == RESULT_OK && data != null) {
String resultData = data.getStringExtra("data");
// 处理返回的数据
}
}
在上述代码中,requestCode 是从 Activity B 返回的请求代码,resultCode 是从 Activity B 返回的结果代码,data 是包含返回数据的 Intent 对象。我们可以根据 requestCode 和 resultCode 判断返回结果的来源和是否成功,然后从 data 中获取返回的数据。
这样,我们就可以使用 Intent 返回数据给上一个活动了。