Android之Intent

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 返回数据给上一个活动了。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值