Intent


前言

Intent是android程序中各组件之间进行交互的一种重要方式,他不仅可以指明当前组件想要执行的动作,还可以在不同的组件之间传递数据。Intent一般可以用于启动活动,启动服务以及发送广播等场景。

这里Intent:用于由主活动跳转到其他活动

一、显示Intent

首先创建一个新的活动
在这里插入图片描述
在这里插入图片描述
布局文件是自己创建的,没用自动创建的那个
在这里插入图片描述
在AndroidMainifest.xml中添加标签
在这里插入图片描述
在FirstActivity中的OnCreate方法里添加两句代码构建Intent
在这里插入图片描述

Intent intent=new Intent(FirstActivity.this,SecondActivity.class);
                startActivity(intent);

运行点击button1就可以跳转到secondActivity了。

二、隐式Intent

不明确指出想要启动那个活动,制定一系列抽象的action和category等信息,交由系统去分析这个Intent,找出合适的活动启动,就是指可以响应这个Intent的活动。

首先在AndroidMainifest.xml;里的secondActivity的标签里面添加intent,指明secondActivity可以相应的action和category,只有中的内容同时能够匹配上Intent指定的action和category这个活动才可以响应Intent。

<intent-filter>
                <action android:name="com.example.a102.myapplication.ACTION_START"/>
                <category android:name="android.intent.category.DEFAULT"/>
            </intent-filter>

在这里插入图片描述
修改FirstActivity中的按钮点击事件

Intent intent=new Intent("com.example.a102.myapplication.ACTION_START");

在这里插入图片描述
没有在这里说明category,因为是默认的
如果在FirstActivity中指定了category,但是没有在AndroidMainifest中指定,是无法响应的
在这里插入图片描述
在AndroidMainifest中也要指定category,不然会报错
在这里插入图片描述

三、更多隐式Intent的用法

实现点击按钮打开浏览器,只需在FirstActivity的onCreate里加

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

在这里插入图片描述
与此对应的,还可以在标签中再配置一个标签,用于更加精确地指定当前活动能够响应什么类型的数据。
标签可以配置以下内容:

android:scheme 用于指定数据的协议部分,例如http部分
android:host 用于指定数据的主机名部分,例如www.baidu.com
android:port 用于指定数据的端口部分,一般紧随在主机名之后
android:path 用于指定主机名和端口之后的部分,如一段网址中跟在域名之后的内容
android:mimeType 用于指定可以处理的数据类型,允许使用通配符的方式进行指定

只有当标签指定的内容和Intent中携带Data完全一致,活动才可以响应该intent
新建一个活动ThirdActivity,勾选Generate Layout File,布局文件起名为third_layout
在这里插入图片描述
在AndroidMainifest中修改第三个活动的注册信息

<activity android:name=".ThirdActivity" android:label="Activity3">
            <intent-filter>
                <action android:name="android.intent.action.VIEW"></action>
                <category android:name="android.intent.category.DEFAULT"/>
                <data android:scheme="http"></data>
            </intent-filter>
        </activity>

在这里插入图片描述
运行FirstActivity点击按钮
在这里插入图片描述
就会出现activity3的选项
拨打电话
在这里插入图片描述

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

运行结果
在这里插入图片描述
地图定位

Intent intent=new Intent(Intent.ACTION_VIEW);
                        intent.setData(Uri.parse("geo:39.899533,116.036476"));
                startActivity(intent);

在这里插入图片描述
运行结果
在这里插入图片描述
其他的intent用法

四、向下一个活动传递数据

Intent中提供了一系列putExtra()方法的重载用于传递数据,方法可以将想要传递的数据暂存到intent里,启动另一个活动后再将数据取出,例如将FirstActivity中的字符串传递到SecondActivity中:
在FirstActivity中:

String data="hello secondActivity";
                Intent intent=new Intent(FirstActivity.this,SecondActivity.class);
                intent.putExtra("extra_data",data);
                startActivity(intent);

在这里插入图片描述
在SecondActivity中:

Intent intent=getIntent();
        String data=intent.getStringExtra("extra_data");
        Log.d("SecondActivity",data);

在这里插入图片描述
运行后在logcat中可以看到数据传输成功
在这里插入图片描述

五、 返回数据给上一个活动

Activity中有一个startActivityForResult()方法,用于启动活动,这个方法期望在活动销毁的时候能够返回一个结果给上一个活动。
首先在FirstActivity中
修改按钮点击事件:

Intent intent=new Intent(FirstActivity.this,SecondActivity.class);
        startActivityForResult(intent,1);

重写onActivityResult方法:

 @Override
    protected void onActivityResult(int requestCode,int resultCode,Intent data)
    {
        switch (requestCode)
        {
            case 1:
                if(resultCode==RESULT_OK)
                {
                    String returnedData=data.getStringExtra("data_return");
                    Log.d("FirstActivity",returnedData);
                }
                break;
            default:
        }
    }

在这里插入图片描述

在SecondActivity中:

@Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.second_layout);
        Button button2=(Button) findViewById(R.id.button_2);
        button2.setOnClickListener(new View.OnClickListener(){
            @Override
            public void onClick(View view)
            {
                Intent intent=new Intent();
                intent.putExtra("data_return","hello FirstActivity");
                setResult(RESULT_OK,intent);
                finish();
            }
        });

在这里插入图片描述
运行结果:
在这里插入图片描述
但是如果用户不点击按钮,back退出活动二,就不能显示返回数据,可以通过在secondActivity中重写onBackPressed方法来解决:

    @Override
    public void onBackPressed()
    {
        Intent intent=new Intent();
        intent.putExtra("data_return","hello FirstActivitgy");
        setResult(RESULT_OK,intent);
        finish();
    }

这样只要销毁了活动二就会给活动一返回一个数据。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值