Android学习之基础知识四-Activity活动3讲(Intent的使用)
主活动名称FirstActivity.java改为了MenuTest.java
一、什么是Intent:
1、Intent是Android程序中各组件之间进行交互的重要方式,不仅可以指明当前组件想要进行的动作,还能在不同组件之间传递数据
2、Intent可被用于启动活动、启动服务、发送广播等场景
3、Intent大致分为两种:显式Intent、隐式Intent
4、简单的理解,Intent就是进行页面跳转,从一个手机页面跳转到另外一个手机页面
二、显式Intent
1、在创建一个activity活动:java源代码包---->New---->Activity----->Empty Activity
2、Activity名称:SecondActivity,勾选Generate Layout File,不要勾选Launcher Activity

3、新建完成后会自动生成Java源代码、layout布局文件、在AndroidManifest.xml中注册,在新生成的布局文件中再添加一个按钮

4、在MenuTest主活动中修改点击事件的监听器
Intent有许多构造函数,下面使用的是:Intent(Context packageContext,Class<?> cls),传入两个参数:
Context:启动活动的上下文,即当前的活动,这里把MenuTest.this作为上下文传入
Class:传入需要启动的活动,这里需要开启SecondActivity这个活动
5、startActivity()方法专门用于启动目标活动,需要传入一个intent参数

3、效果展示:点击button1按钮,页面跳转到button2的页面
点击button1按钮前:

点击button2按钮之后:

三、隐式Intent
1、隐式Intent:在<activity>标签中配置intent
2、通过在<activity>标签中配置<intent-filter>的内容,可以知道当前活动能够响应的action和category,只有当AndroidManifest.xml中的<action>和<category>都同时匹配到Java源代码中Intent指定的action和category时,这个活动才会响应Intent(默认的category可以不在Java源代码中写出来)。
3、在AndroidManifest.xml文件中的第二个activity活动标签中添加如下代码:
com.example.administrator:包名
android.intent.category.DEFAULT:一种系统默认的category,在调用startActivity()方法的时候会自动将这个category添加到Intent中

4、在MenuTest.java中修改点击事件的监听器:
因为“android.intent.category.DEFAULT”是系统默认的,会自动添加到Intent中,所以在Intent中可以不要写出

5、程序运行效果:与显式Intent效果一样,正常显示。
注意:
在Java源代码中,每个Intent中只能指定一个action,但可以指定多个category,可以通过addCategory()方法来增加一个自定义的category,自定义的category必须要在<intent-filter>标签中声明,否则会报没有任何活动可以响应的错误信息
在Java源代码中自定义一个category:

在<activity>中声明自定义的category:

四、更多隐式Intent的用法
使用隐式Intent,不仅可以启动自己程序内的活动,还可以启动其他程序的活动,使得Android多个应用程序之间的功能共享成为了可能。比如说用自己的程序去打开百度网页。
方法一:
在Java源代码的点击事件中写出如下代码,实现“点击按钮时,进行页面跳转,跳转到百度网页”

效果如下:

点击按钮后进入百度网页:

方法二:
还可以在<intent-filter>标签中配置一个<data>标签,用于更精确地指定当前活动能够响应声明类型的数据,在<data>标签中可以配置以下内容:
android:scheme 指定数据的协议部分,如:http
android:host 指定数据的主机名部分,如:www.baidu.com
android:port 指定数据的端口部分,一般紧随在主机名后面
android:path 指定主机名和端口之后的部分,如一段网址中跟在域名之后的部分
android:mimeType 指定可以处理的数据类型,允许使用通配符的方式进行指定。
注意:只有<data>标签中指定的内容和Intent中携带的Date完全一致时,当前活动才能响应Intent,一般在<data>标签中不会指定过多的内容,如上面的示例中,只需要指定:
android:scheme为http,就可以响应所以http协议的Intent了
1、新建activity

2、创建button3

3、修改注册信息:


没有<category android:name="android.intent.category.BROWSABLE"/>程序也能正常运行,这个错误信息与AS环境及版本有关,是关于安全性的一个配置
链接:Android中Acition和Category常量表:https://blog.csdn.net/gf771115/article/details/7827833
运行结果如下:点击button1,弹出一个选项,选择Browser选项和JUST ONCE(或者ALWAYS),打开百度网页


需要注意的是:虽然我们声明了ThirdActivity是可以响应打开网页的Intent的,但是实际上这个活动并没有加载和显示网页的功能,所以在真正的项目中尽量不要出现这种可能误导用户的行为,不然会让用户对我们的应用产生负面的印象。
五、拓展
除了http协议外,我们还可以 指定其他协议,比如:geo表示显示地理位置,tel表示拨打电话,下面的代码展示了如何在我们的程序中调用系统的拨号界面
1、修改点击事件监听器的代码:

2、效果如下:

点击button1按钮后:

Android学习之基础知识四-Activity活动3讲(Intent的使用)的更多相关文章
- Android学习之基础知识四-Activity活动4讲(Intent传递数据)
Intent除了可以开启一个活动,还能在启动活动的时候传递数据,此时Intent相当于一个保存数据的库,我们先把数据保存在Intent中,然后再根据各个activity的需要从其中取出数据. 一.使 ...
- Android学习之基础知识四-Activity活动6讲(体验Activity的生命周期)
一.体验活动的生命周期的执行 代码组成: 1.三个Java类:MainActivity.java.NormalActivity.java.DialogActivity.java 2.三个布局文件:ac ...
- Android学习之基础知识四-Activity活动5讲(Activity的生命周期)
一.返回栈 1.Android是通过任务(Task)来管理活动,一个任务就是一个返回栈内所有活动的集合. 2.返回栈是一个后进先出的数据结构,每启动一个新的活动,该活动就会覆盖原来的活动,位于栈顶位置 ...
- Android学习之基础知识四-Activity活动7讲(活动的启动模式)
在实际的项目开发中,我们需要根据特定的需求为每个活动指定恰当的启动模式.Activity的启动模式一共有4种:standard.singleTop.singleTask.singleInstance. ...
- Android学习之基础知识四-Activity活动2讲
一.在活动(activity)中添加Toast显示: 1.Toast作用:Android系统提供的一种非常好的提醒方式,将一些短小的信息提供给用户,这些信息会在一段时间后自动消失,不会占用任何屏幕空间 ...
- Android学习之基础知识四-Activity活动1讲
一.活动(Activity)的基本用法: 1.手动创建活动FirstActivity(java源码): A.Android Studio在一个工作区间只允许打开一个项目,点击:File--->C ...
- Android学习之基础知识四-Activity活动8讲(活动的灵活运用)
一.判断当前是在哪个活动 1.我们还是接着上一讲的代码,首先创建一个Java类:BaseActivity.java.这个类我们不作为一个活动,也不在AndroidManifest.xml中注册,它只是 ...
- Android学习之基础知识十三 — 四大组件之服务详解第一讲
一.服务是什么 服务(Service)是Android中实现程序后台运行的解决方案,它非常适合去执行那些不需要和用户交互而且还要求长期运行的任务.服务的运行不依赖于任何用户界面,即使程序被切换到后台, ...
- Android学习之基础知识十四 — Android特色开发之基于位置的服务
一.基于位置的服务简介 LBS:基于位置的服务.随着移动互联网的兴起,这个技术在最近的几年里十分火爆.其实它本身并不是什么时髦的技术,主要的工作原理就是利用无线电通讯网络或GPS等定位方式来确定出移动 ...
随机推荐
- 【23】备忘录模式(Memento Pattern)
一.引言 在上一篇博文分享了访问者模式,访问者模式的实现是把作用于某种数据结构上的操作封装到访问者中,使得操作和数据结构隔离.而今天要介绍的备忘者模式与命令模式有点相似,不同的是,命令模式保存的是发起 ...
- regular.js
//手机号验证 var regMobile=/^1[3,5,8]\d{9}$/; //固定电话 var regPhone=/^(^0\d{2}-?\d{8}$)|(^0\d{3}-?\d{7}$)|( ...
- 网络安全之sql注入
1.何为Sql注入? 所谓SQL注入,就是通过把SQL命令插入到Web表单提交或输入域名或页面请求的查询字符串,最终达到欺骗服务器执行恶意的SQL命令.具体来说,它是利用现有应用程序,将(恶意的)SQ ...
- 51Nod 最小公倍数之和V3
这题公式真tm难推……为了这题费了我一个草稿本…… woc……在51Nod上码LaTeX码了两个多小时…… 一开始码完了前半段,刚码完后半段突然被51Nod吃了,重新码完后半段之后前半段又被吃了,吓得 ...
- SuperMap iObject .NET开发完成后私有部署,打包安装
转载自:http://blog.csdn.net/supermapsupport/article/details/53319800 作者:皇皇 SuperMap iObjict .NET组件开发结束后 ...
- CloudSim源代码学习——云数据中心(Datacenter)
package org.cloudbus.cloudsim; import java.text.DecimalFormat;//十进制 import java.util.ArrayList; impo ...
- JMeter 利用Jmeter批量数据库插入数据
利用Jmeter批量数据库插入数据 by:授客 QQ:1033553122 1. 启动Jmeter 2. 添加 DBC Connection Configuration 右键线程组-> ...
- C#中禁止跨线程直接访问控件
C#中禁止跨线程直接访问控件,InvokeRequired是为了解决这个问题而产生的,当一个控件的InvokeRequired属性值为真时,说明有一个创建它以外的线程想访问它.此时它将会在内部调用ne ...
- Linux 查看本机串口方法
最近在了解嵌入式方面的知识,就随笔记录一下: 查看Linux本机串口: 1.查看串口是否可用 可以对串口发送数据比如对com1口,echo /dev/ttyS02.查看串口名称使用 ls -l /de ...
- 使用navicat 连接mysql出现1251错误
最近需要用MYSQL,使用navicat 连接时总出现1251错误,在网上查了一些别人的方法并试过 以下方法是正确的. 方法来自:https://blog.csdn.net/XDMFC/article ...