Intent控件

本文详细介绍了Intent控件在Android开发中的应用,包括无数据传递时的显式Intent和隐式Intent的使用,以及有数据传递时如何发送、接收和返回数据。示例代码展示了如何实现页面跳转、打开网页、拨打电话等功能。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Intent控件主要用于页面之间的跳转,并且可能伴随数据的传递。

1. 无数据传递

1. 显式Intent

示例代码(可用在onClick()方法中,通过点击来实现跳转):
(PS: 此处为FirstActivity类向SecondActivity类跳转)

Intent intent = new Intent(FirstActivity.this, SecondActivity.class);
startActivity(intent); //启动活动

2. 隐式Intent

只有 action 和 category 中的内容同时能够匹配上 Intent 中指定的 action 和 category 时,这个活动才能响应该 Intent。
示例代码:

Intent intent = new Intent("com.example.activitytest.ACTION_START");
intent.addCategory( "com.example.activitytest.MY_CATEGORY"); //可以调用 Intent 中的 addCategory()方法来添加一个 category
startActivity(intent);

注意:隐式Intent需要在AndroidManifest中配置activity、intent-filter、action 、category ,例如:

<activity  android:name= ".SecondActivity">
     <intent-filter >
          <action android:name= "com.example.activitytest.ACTION_START" />
          <category android:name= "android.intent.category.DEFAULT" /> --默认的category
          <category android:name= "com.example.activitytest.MY_CATEGORY" /> --自定义的 category
     </intent-filter >
</activity >

注:
1. 每个 Intent 中只能指定一个 action,但却能指定多个 category。
2. android.intent.category.DEFAULT是一种默认的 category,在调用startActivity()方法的时候会自动将这个 category 添加到 Intent 中。因此,无需再写intent.addCategory( "com.example.activitytest.MY_CATEGORY");

3. 其他隐式Intent

1. 打开网页

调用系统浏览器打开某网页。
示例代码(点击后调用系统浏览器打开百度主页):

Intent intent = new Intent(Intent.ACTION_VIEW);
intent.setData(Uri.parse("http://www.baidu.com"));
startActivity(intent); 

此外,还可以在 intent-filter 标签中再配置一个 data 标签,用于更精确地指定当前活动能够响应什么类型的数据。代码示例:

<activity android:name=".ThirdActivity">
        <intent-filter>
            <action android:name="android.intent.action.VIEW" />
            <category android:name="android.intent.category.DEFAULT" />
            <data android:scheme="http"/> --此处为 http 协议
        </intent-filter>
</activity>

注:
1. Intent.ACTION_VIEW:Android 系统的内置动作,其常量值为 android.intent.action.VIEW。
2. Uri.parse()方法:将一个网址字符串解析成一个 Uri 对象。
3. setData()方法:接收一个 Uri 对象,主要用于指定当前 Intent 正在操作的数据,而这些数据通常都是以字符串的形式传入到 Uri.parse()方法中解析产生的。
4. 在 data 标签中通过 android:scheme 指定了数据的协议是 http 协议,这样 ThirdActivity 就和浏览器一样,能够响应一个打开网页的 Intent 了(data标签还可其他内容)。
如图所示:data标签

2. 其他

除 http 协议外,我们还可以指定很多其他协议,比如 geo 表示显示地理位置、 tel 表示拨打电话。例如,拨打电话:
示例代码(点击后会启动拨号程序并显示10010):

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

注:Intent.ACTION_DIAL:Android 系统的内置动作。

2. 有数据传递

1. 发送数据

即向下一个活动传递数据。
示例代码:

Intent intent = new Intent(FirstActivity. this, SecondActivity.class);
intent.putExtra( "extra_data", "Hello, SecondActivity!"); //putExtra(键,值)
startActivity(intent);  

2. 接收数据

即接收并显示从上一个活动接收的数据。
示例代码:

Intent intent = getIntent();
String data = intent.getStringExtra("extra_data");
Log.i("tag" , data);
Toast.makeText(SecondActivity.this , data, Toast.LENGTH_LONG).show(); //勿忘show出来!

注:由于此处传递的是字符串,因此用getStringExtra方法获取数据;若为整型,则用getIntExtra方法;以此类推。

3. 返回数据

即返回数据给上一个活动。
1) 请求方
startActivityForResult方法期望在活动销毁时能返回一个结果给上一个活动(即请求数据)。
示例代码:

Intent intent = new Intent(Intent.ACTION_VIEW);
startActivityForResult(intent, requestCode); //参数(Intent, requestCode), requestCode要求唯一值

onActivityResult方法得到返回的数据。
示例代码:

protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    switch(requestCode) { //也可用if语句判断接收
    case requestCode:
        if(resultCode == RESULT_OK) {
            String returnedData = data.getStringExtra("data_return");
            Log.d("FirstActivity", returnedData);
        }
        break;
    default:
    }
}

2) 发送方
返回数据。
示例代码:

Intent intent = new Intent(); //该Intent仅仅是用于传递数据
intent.putExtra("data_return", "Hello FirstActivity!");
setResult(RESULT_OK, intent);
finish();//该类被销毁之后会回调上一个活动的 onActivityResult()方法

Q: 若用户按下Back返回键,数据如何返回?
A: 若按下Back键,会去执行onBackPressed()方法中的代码,将要返回的数据添加到该方法即可。

public void onBackPressed() {
    Intent intent = new Intent(); //该Intent仅仅是用于传递数据
    intent.putExtra("data_return", "Hello FirstActivity!");
    setResult(RESULT_OK, intent);
    finish();
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值