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,文章中如有错误请大家不吝赐教。希望与大家一同学习,共同进步。