AndroidStudio中使用Intent启动活动以及传递数据

AndroidStudio中使用Intent启动活动以及传递数据

基于AndroidStudio 4.0.1 版本:

Intent表达的是一种意图,可以在活动之间来回穿梭。同时还可以在不同的组件中传递数据。一般用于启动活动,启动服务以及发送广播等场景。本文所述为启动活动以及在活动中单双向传递数据。


前言

Intent:表达的是一种意图,在活动之间来回穿梭。同时还可以在不同组件传递数据。一般用于启动活动,启动服务以及发送广播等场景。本文主要讲述Intent用于启动活动并在活动间单向及双向传递数据。


一、Intent是什么?

Intent表达的是一种意图,在活动之间来回穿梭。同时还可以在不同组件传递数据。一般用于启动活动,启动服务以及发送广播等场景。

二、分类及使用步骤

1.显示Intent

Intent表达的意图很明显,这种称为显示Intent。

显示启动Activity大致可以分为以下两个步骤。

(1)创建Intent对象。

需要传入两个参数:第一个参数Context要求提供一个启动活动的上下文(通常是当前的Activity),第二个参数则指要启动的目标活动(即要跳转到的Activity)。

代码如下(示例):

 Intent intent = new Intent(UIActivity.this, MainActivity.class);

(2)应用startActivity()方法来启动Activity。

startActivity()方法的语法格式如下:public void startActivity (Intent intent)

代码如下(示例):

 startActivity(intent);

2.隐式Intent

不直接表达想启动哪个活动,通过设置更为抽象的action和category等信息,让系统自动去判断启动哪个活动。(在注册表即AndroidManifest.xml中进行设置)action和category要同时匹配才能启动,每个Intent只能指定一个action,但是可以指定多个category。

隐式启动Activity大致可以分为以下两个步骤。

(1)在注册表中对目标Activity设置action与category。

代码如下(示例):

<activity android:name=".SecondActivity">
    <intent-filter>
      	 <action android:name="com.example.activitytest.ACTION_START" />
         <category android:name="android.intent.category.DEFAULT" />
	</intent-filter>
</activity>

(2)使用了Intent另一个构造函数,直接将action字符串传了进去。

代码如下(示例):

Intent intent=new Intent("com.example.activitytest.ACTION_START");
startActivity(intent);

三、隐式Intent的更多用法

(1)调用系统浏览器来打开一个网页
代码如下(示例):

Intent intent = new Intent();				// 创建Intent对象
intent.setAction(Intent.ACTION_VIEW);			// 为Intent设置动作
intent.setData(Uri.parse("http://www.baidu.com"));	// 为Intent设置数据
startActivity(intent);					// 将Intent传递给Activity

也可以使用下面的语句实现:

Intent intent = new Intent(Intent.ACTION_VIEW,
 Uri.parse("http://www.mingribook.com"));	// 创建Intent对象
startActivity(intent);				// 将Intent传递给Activity

参数解释:Intent.Action_VIEW是安卓内置动作(专门打开活动的动作),Uri.parse()将一个字符串网址解析成Uri对象,然后setData()将这个对象传入Intent。

(2)实现打电话功能
代码如下(示例):

 Intent intent = new Intent(Intent.ACTION_DIAL);
 intent.setData(Uri.parse("tel:10086"));
 startActivity(intent);

四、使用Intent在Activity之间传递数据

1.单向传递数据

现在有两个Activity分别是MainActivity1和MainActivity2,现在使用MainActivity1传递数据到MainActivity2(示例):


在MainActivity1中编写:使用inputEtra,参数是一个key-value(键-值)对的组合,可以根据其中的key来获取具体的内容(value)
   Intent intent = new Intent(MainActivity1.this,MainActivity2.class);
                intent.putExtra("name",lixu);
                intent.putExtra("age",21);
                startActivity(intent);

在MainActivity2中编写:

    Intent intent = getIntent(); //获取Intent对象
    String data1 = intent.getStringExtra("name");//获取输入的姓名
   	int data2 = intent.getIntExtra("age", 18);//获取输入的年龄
    Log.d("IntentActivity", "名字:" + data1 + ",年龄:" + data2);//在终端打印出来

2.双向传递数据

要实现调用另一个Activity并返回结果,经常需要使用以下3个方法。

(1)startActivityForResult(Intent intent, int requestCode)方法原型

public void startActivityForResult (Intent intent, int requestCode)

startActivityForResult()这个方法期望在活动销毁时,返回一个结果给上一个活动。请求码1就是回调中判断数据的来源。(示例):

  startActivityForResult(intent,1);

(2)setResult(int resultCode, Intent data)方法

public final void setResult (int resultCode, Intent data)

setResult():两个参数(第一个参数是处理的返回结果,一般就是RESULT_OK/RESULT_CANCELED,第二个则是带有数据的intent传回去)(示例):

public void onClick(View v){
    
    
         Intent intent = new Intent();
  		 intent.putExtra("data_return","Hello FirstActivity");
         setResult(RESULT_OK,intent);
         finish();

(3)onActivityResult(int requestCode, int resultCode, Intent data)方法

protected void onActivityResult(int requestCode, int resultCode, Intent data)

由于第二个活动是通过第一个活动中的startActivityForResult()方法启动的,所以被销毁时第一个活动中要通过onActivityResult()这个方法呼应。onActivityResult()三个参数:(第一个参数requestCode启动活动时的请求码,第二个参数返回数据时传入的处理结果,第三个参数带数据的Intent),如果是直接按BACK键返回则重写onBackPressed()这个方法

(示例):

    //    获得返回的数据 请求码 结果码 数据源
    @Override
    protected void onActivityResult(int requestCode, int resultCode, @Nullable Intent data) {
    
    
        super.onActivityResult(requestCode, resultCode, data);
        switch (requestCode) {
    
    
            case 1:
                if (resultCode == RESULT_OK) {
    
    
                    String returnedData = data.getStringExtra("data_return");
                    Log.d("IntentActivity", returnedData);
                }
                break;
            default:
        }
    }

具体关系:
在这里插入图片描述


这是本人的第一篇CSDN,文章中如有错误请大家不吝赐教。希望与大家一同学习,共同进步。

猜你喜欢

转载自blog.csdn.net/Lixu_No_1/article/details/109230458
今日推荐