Android学习笔记:有神奇作用的Intent

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

Intent有多个构造函数的重载,这里我们先只介绍几个常见的

两个Activity的跳转

Intent分为显示和隐式

显式Intent

首先我们需要给Activity的跳转一个事件发生的点,所以我们在控件上添加一个按钮,然后给这个按钮添加一个跳转事件,也就是从一个activity跳转到另一个activity,我们在监听按钮的方法中显示创建Intent对象,这个对象的构造函数有很多重载,我们使用其中接收两个参数的构造方法,两个参数分别是启动活动的上下文,也就是跳转的起始页面,第二个就是终点,也就是想要跳转到的页面。

那么如何使用呢?Activity类中提供了startActivity()方法,这个方法专门用来启动活动的,他接收一个intent参数,这样就可以把上面创建好的Intent对象传入进去

        regist = findViewById(R.id.btn_1);
        regist.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Toast.makeText(MainActivity.this,"登录成功",Toast.LENGTH_SHORT).show();
                //跳转到Button演示界面
                Intent intent = new Intent(MainActivity.this,Register.class);
                startActivity(intent);
            }
        });

这样子点击这个按钮就可以跳转到想要跳转到的另一个页面
起始页面
在这里插入图片描述
点击登录以后的页面
在这里插入图片描述
这上面两个Activity是我提前写好的,所以下去实践的时候需要自己写好需要跳转的两个页面

隐式转换

相对于显示转换,隐式转换要晦涩许多,他把需要启动活动这个事情交给了更抽象的action和category等信息,然后交给系统去分析应该去启动哪些活动,

我们需要去AndroidManifest.xml添加代码

<activity android:name=".Register" >
            <intent-filter>
                <action android:name="com.example.activitytest.ACTION_START"/>
                <category android:name="android.intent.category.DEFAULT"/>
            </intent-filter>
        </activity>

在< action >标签中我们指明了当前活动可以响应com.example.activitytest.ACTION_START这个action,而 < category>标签则包含了一些附加信息,更精确地指明了当前的活动能够响应的Intent中还可能带有的category。只有< action >和< category >中的内容同时能够匹配上Intent中指定的action和category时,这个活动才能响应该Intent

然后我们修改MainActivity中按钮的点击事件

 regist.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Toast.makeText(MainActivity.this,"登录成功",Toast.LENGTH_SHORT).show();
                //跳转到Button演示界面
                Intent intent = new Intent("com.example.activitytest.ACTION_START");
                startActivity(intent);
            }
        });

这个时候你再点击按钮是可以跳转的,因为我们设置的category的值是DEFAULT也就是默认的,所以这里不影响,那么如果说我这里给了category值呢?
我们首先先修改AndroidManifest.xml,在action中修改一下,改成以下代码

<activity android:name=".Register" >
            <intent-filter>
                <action android:name="com.example.activitytest.ACTION_START"/>
                <category android:name="android.intent.category.DEFAULT"/>
                <category android:name="com.example.activitytest.MY_CATEGORY"/>
            </intent-filter>
        </activity>

这个时候如果我们再重新启动程序的话,按照刚刚的程序,就会跳转失败的,程序会崩溃
所以我们就要去修改java代码

 regist.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Toast.makeText(MainActivity.this,"登录成功",Toast.LENGTH_SHORT).show();
                //跳转到Button演示界面
                Intent intent = new Intent("com.example.activitytest.ACTION_START");
                intent.addCategory("com.example.activitytest.MY_CATEGORY");
                startActivity(intent);
            }
        });

这里就需要在这里添加一个category,然后再重新启动这个时候就会成功

其他隐式用法

之前也提到过Intent隐式用法还有更多,那么我们会经常性的在用一个app的时候会出现点击一个按钮就进入一个网页的状态,或者说点击一个按钮进入拨号流程,再或者说两个activity的数据交流,那么我们可以挨个来实现一下

调用系统浏览器

接着上面的代码写,那么如何在点击一个按钮的时候调用系统浏览器呢,我们需要进按钮监听方法中去修改代码

regist.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Intent intent = new Intent(Intent.ACTION_VIEW);
                intent.setData(Uri.parse("http://www.baidu.com"));
                startActivity(intent);
            }
        });

这个时候我们给Intent参数一个常量Intent.ACTION_VIEW,这个是Android系统的动作,然后调用setData方法,给他传入一个url,也就是把这个字符串解析成一个Uri对象,然后他就可以直接跳转到你输入的网址中,让我们来看看这个代码的效果
我将点击事件放在登录按钮上的,也就是点击登录以后会直接进入到百度的页面
在这里插入图片描述
在这里插入图片描述
上面出了点小故障,这是我在宿舍断网以后写的,所以这可能进外网有点问题=-=

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值