Android学习之Intent

本文详细介绍了Android开发中的Intent概念及其使用方法,包括显式Intent和隐式Intent的应用场景、如何使用Intent进行网页浏览和拨号操作,以及如何通过Intent在不同Activity间传递数据。

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

Intent

intent(意图),指明当前组件想要执行的动作,在不同组件之间传递数据。一般可被用于启动活动,启动服务,以及发动广播等场景。
intent使用分为显式和隐式两种。

显示Intent的使用

在第一个Activity代码中加入以下代码,可调用第二个Activity。

Intent intent = new Intent(FirstActivity.this,SecondActivity.class);
//第一个参数表示上下文,第二个参数表示要启动的目标活动,这是intent的构造函数之一
startActivity(intent);
//通过intent启动目标活动

隐式Intent的使用

不明确指出想启动哪个活动,而是指定了一系列更为抽象的action和category等信息,然后交由系统分析这个Intent,并帮助找出合适的活动去启动。

被启动的Activity的ActivityManifest.xml文件中的活动注册中加上可响应的intent的筛选条件。同时满足action和category的intent才能启动这个活动。

<activity android:name = ".SecondActivity">
    <intent-filter>
        <action android:name="com.example.activity.ACTION_START"/>
        <category android:name="android.intent.category.DEFAULT"/>
        //这个是默认的category,所有intent即使不声明也满足这个条件
        <category android:name="android.intent.category.MY_CATEGORY"/>
    </intent-filter>
</activity>

在要启动另一个活动的活动中设置intent,这个intent可启动有上面注册信息的活动,若一个intent寻找不到匹配的活动时,会出现ActivityNotFoundException。

Intent intent = new Intent("com.example.activity.ACTION_START");
intent.addCategory("com.example.activity.MY_CATEGORY");
startActivity(intent);

用Intent实现浏览网页、拨号等

浏览网页Intent设置

Intent intent  = new Intent(Intent.ACTION_VIEW);
//Android内置,常量值为android.intent.action.VIEW
intent.setDate(Uri.prase("http://www.baidu.com"));
//将网址字符串解析成一个Uri对象,再用setData方法将Uri对象传递进去
startActivity(intent);

浏览网页ActivityManifest.xml的intent-filter设置

<action android:name="android.intent.action.VIEW"/>
<category android:name="android.intent.category.DEFAULT"/>
<data android:schema="http"/>
android:schema,用于指定数据的协议部分,如http
android:host,用于主机名部分。
android:port, 用于端口部分。
android:path,用于主机名和端口之后的部分,如域名之后的内容。
android:mimeType,指明可以处理的数据类型,允许用通配符等方式指定。

拨号intent设置,可直接进入拨号界面,拨打10086,tel表示拨打电话,geo表示显示地理位置。

Intent intent = new Intent(Intent.ACTION_DIAL);
intent.setData(Uri.prase("tel:10086"));
startAvtivity(intent);

用Intent传递数据,并获得返回数据

获得返回数据要调用startActivityForResult()方法,且要在被启动程序销毁后才会获得返回的数据。

第一个Activity的Intent设置

String data = "Hello SecondActivity!";
Intent intent = new Intent(FirstActivity.this,SecondActivity.class);
intent.putExtra("extra_data",data);
//发送数据
startActivityForResult(intent,1);
//此方法可获得返回数据,第二个参数是请求码,用于判断数据来源
//也可调用startActivity()方法传送数据

第二个Activity的Intent设置

Intent intent1 = getIntent();
String data = intent.getStringExtra("extra_data");
Log.d("secondActivity",data);
//获取第一个活动传来的intent,获取其中的数据
Intent intent2 = new Intent();
intent.putExtra("data_return","Hello FirstActivity!");
setResult(RESULT_OK,intent2);
//设置intent,并将数据保存在intent中,没有任何意图
//第一个参数是结果码,第二个参数是保存数据的intent
finish();
//销毁第二个活动

在第一个活动中处理第二个活动返回的数据
在第二个活动销毁后,回调第一个活动的onActivityResult()方法

@Override
protected void onActivityResult(int requestCode,int resultCode,Intent data){
//第一个参数是请求码,判断数据来源,第二个参数是结果码,判断处理结果是否成功,
//第三个参数是获取数据的intent
    switch(requestCode){
    case 1:
        if(resultCode == RESULT_OK){
        String returnData = data.getStringExtra("data_return");
        //获取数据,处理数据
        }
        break;
    default:
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值