Android学习 (三) 在活动之间穿梭之Intent

Intent最基本的用法就是实现活动之间的切换,有两种重载函数
Intent分为显式和隐式:

1).显式,第一种重载函数如下,就是目的意图非常明显

//这段代码实现从FirstActivity中启动SecondActivity

//第一个参数是启动活动的上下文,第二个参数class则是指定想要启动的目标
Intent intent = Intent(FirstActivity.this,SecondActivity.class);

//Activity类提供的方法,只需把Intent传入就可以启动活动了。
startActivity(itent);

下面是我手机上的效果,点击BUTTON 1
这里写图片描述

会切换到BUTTON 2

这里写图片描述

2).隐式,使用第二种重载函数,只有一个参数,并没有明确的意图说明。

例如:我在AndroidMainFest的SecondActivity中添加如下action和category:

//为SecondActivity进行注册
        <activity android:name=".SecondActivity">
            <intent-filter>
                //指明当前活动响应的动作和方式
                //第一句说明当前活动可以响应com.example.activitytest.ACTION_START这个action
                <action android:name="com.example.activitytest.ACTION_START"/>
                //android.intent.category.DEFAULT是一种默认的category,startActivity会自动把这个category添加到Intent中
                <category android:name="android.intent.category.DEFAULT"/>
            </intent-filter>
        </activity>

再去修改FirstActivity中的按钮button_1点击事件,也可以实现两个活动之前的切换

//第二次修改按钮点击事件,实现Intent的隐式反应
        button1.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
//这里直接把SecondActivity中action的字符串传入Intent,表明我们想在通过点击这个button_1启动能够响应com.example.activitytest.ACTION_START这个字符串的action
                Intent intent = new Intent("com.example.activitytest.ACTION_START");
                startActivity(intent);
            }
        });

我是这么理解显示和隐式的(哈哈哈哈),隐式中给了你一个英文单词Tibet,你当时的内心一定是WTF??需要去查查词典,所以,就是这个样子。

这里写图片描述

但是,隐式中需要对应两个因数->action 和 category,只有当这两个都匹配的时候,才能Intent才会被启动.

例如:

//在SecondActivity中action的intent-filter中再添加一个category
//表示Inten还要匹配这个category
<category android:name="com.example.activitytest.MY_CATEGORY"/>

再去FirstActivity中的按钮button_1点击事件中添加如下代码去匹配Intent

intent.addCategory("com.example.activitytest.MY_CATEGORY");

效果就是当在活动一中点击button1时,Intent中的action和category都匹配成功的时候,会打开活动2.

3).更多隐式用法:

例如:在自己的程序里启动其他程序,就是实现程序功能间的互享:

//第三次修改按钮事件,用Intent隐式实现在我的程序中启动另一个程序
        button1.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                //指定Intent的action是Intent.ACTION_VIEW,这是安卓系统内置的动作
                Intent intent = new Intent(Intent.ACTION_VIEW);
                //使用uri.parse方法把网址字符串解析成一个uri对象
                //再用Intent的setData()方法把Uri对象传入Intent
                intent.setData(Uri.parse("http://www.baidu.com"));
                //调用startActivity()来实现这个Intent
                startActivity(intent);
            }
        });

以上程序实现了点击button1,程序打开系统内置浏览器的百度网页.

这里写图片描述

再如,新建活动三ThirdActivity,加入data标签,设置scheme = “http”,代码如下:

//为ThirdActivity注册
        <activity android:name=".ThirdActivity">
            <intent-filter>
                <action android:name="android.intent.action.VIEW"/>
                <category android:name="android.intent.category.DEFAULT"/>
                //这一句指定了数据的协议必须是http
                <data android:scheme="http"/>
            </intent-filter>
        </activity>

因为在活动三种Intent响应的action是action.VIEW同活动一中,所以运行点击活动一的按钮时,会出现如下选项:
这里写图片描述

选择右边的,跳转到活动三:

这里写图片描述

当然Intent还可以跳转到打电话的界面:

//第一次重写button3实现拨号的功能
        botton3.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                //Intent的action->Intent.ACTION_DIAL是一个安卓内置动作
                Intent intent = new Intent(Intent.ACTION_DIAL);
                //data部分指定了协议tel,号码是自己写
                intent.setData(Uri.parse("tel:100"));
                //开始这个intent
                startActivity(intent);
            }
        });

还可以实现活动之间的数据传递。

/第四次重写按钮事件,用Intent实现向下一个活动传递数据
        assert button1 != null;
        button1.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                String data = "这是Intent传递的信息,将会被打印出来";
                //注意了FirstActivity这里是.this,目标是.class,我刚刚把活动一指定为了.class结果出现Cannot resolve constructor 'Intent......的语句
                Intent intent = new Intent(FirstActivity.this, SecondActivity.class);//显示
                intent.putExtra("extra_data",data);//第一个参数是key(键值),第二个是真正的数据
                //开始活动
                startActivity(intent);
            }
        });
/第一次重写按钮事件,实现把活动一传来的数据取出并打印
        Intent intent = getIntent();
        String data = intent.getStringExtra("extra_data");//活动一中的key name
        //打印数据
        Log.d("SecondActivity",data);

结果如下:
这里写图片描述

还有就是实现向上一个活动返回一个结果,没整明白,后面懂了来搞。

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值