Android开发--Intent的使用(1)启动活动
Android系统是目前世界上市场占有率最高的移动操作系统,近年来,Android开发也越来越炙手可热。
在Android开发中,我们使用Intent进行活动Activity之间穿梭。
当我们点击启动器时,我们会直接进入该应用的主活动,但一个活动的应用未免太简单了。那么当有多个活动时,应用如何实现活动间的跳转呢?答案就是使用Intent。
Intent是Android程序中各组件之间进行交互的一种重要方式,它不仅可以指明当前组件想要执行的动作,还可以在不同的组件之间传递数据。一般被用于启动活动、启动服务以及发送广播等场景。
Intent的使用包括显式和隐式使用两种,下面一一介绍。
一、使用显式Intent
首先我们要知道如何声明一个Intent,Intent有多个构造函数,其中一个是Intent( Context packageContext, Class<?>cls)。
第一个参数Context要求提供一个启动活动的上下文,第二个参数Class则指定想要启动的目标活动。
实现活动间显式交互:
1. 首先给活动1中为某控件(通常是按钮)注册一个监听器,对该控件进行某操作时(通常是点击)时执行监听器中的方法(示例是onClick())。我们Intent实现的功能自然就是在这个方法里面定义咯。
2. 构建一个Intent,传入上下文和目标活动,这里是传入FirstActivity.this作为上下文,传入SecondActivity.class作为目标活动。然后通过startActivity()来执行这个Intent。
3. 这样之后就实现了活动间的跳转。
(因为使用这种方式来启动活动,Intent的“意图”很明显,所以称之为显式Intent)
下面代码实现点击FirstActivity的button跳转到SecondActivity。
//设置toast触发点
Button button1 = (Button) findViewById(R.id.button_1);//findViewById()获取在布局文件中的对象
button1.setOnClickListener(new View.OnClickListener(){
@Override
public void onClick(View v){
Intent intent = new Intent (FirstActivity.this, SecondActivity.class);
startActivity(intent);
}
});
二、使用隐式Intent
隐式Intent并不明确指明启动哪个活动,而是指定一系列抽象的action和category等信息,然后交由系统去分析这个Intent,然后找出合适的活动去启动。那么什么是合适的活动呢?其实就是可以响应这个Intent的活动。
实现隐式Intent:实现点击按钮跳转活动2(上面显式Intent一样的功能)
1. 首先在AndroidManifest.xml中注册的活动中,在<activity>标签下配置<intent-filter>的内容,指定当前活动能够响应的action和category。
在<action>标签中指明了当前活动可以响应com.example.myapplication.ACTION_START这个action,<category>包含了一些附加信息,更精确地指明了当前的活动能够响应的Intent中可能还带有的category。
只有<action> <category>中的内容同时匹配Intent中指定的action和category时,这个活动才能响应该Intent
<activity android:name=".SecondActivity">
<intent-filter>
<action android:name="com.example.myapplication.ACTION_START"/>
<category android:name="android.intent.category.DEFAULT" />
<category android:name="com.example.myapplication.MY_CATEGORY" />
</intent-filter>
</activity>
2. 修改FirstActivity中按钮的点击事件。使用Intent的另一个构造函数,直接将action的字符串传入。
每个Intent只能指定一个action,但是可以有多个category。
button1.setOnClickListener(new View.OnClickListener(){
@Override
public void onClick(View v){
Intent intent = new Intent("com.example.myapplication.ACTION_START");
intent.addCategory("com.example.myapplication.MY_CATEGORY");
startActivity(intent);
}
});
3. 这样就实现了点击button1跳转到活动2的功能啦,只是这次我们用隐式Intent。
更多的隐式Intent
1. 点击按钮打开网页
Button button2 = (Button) findViewById(R.id.button_2);
button2.setOnClickListener(new View.OnClickListener(){
@Override
public void onClick(View v) {
Intent intent_1 = new Intent(Intent.ACTION_VIEW);
intent_1.setData(Uri.parse("http://www.baidu.com"));
startActivity(intent_1);
}
});
这里首先指定了Intent的action是Intent.ACTION_VIEW(这是Android系统内置的动作,其常量值为android.intent.action.view)
然后通过Uri.parse()方法把网址字符串解析成一个Uri对象,再调用Intent的setData() 将这个Uri对象传递进去。
(setData() 接收一个Uri对象,主要用于指定当前Intent正在操作的数据)
2. 选择软件进行打开操作
每当我们想打开一个word文档时,手机总会弹出一条消息,选择打开方式(即使用哪个软件打开),这个操作如何实现呢?
就以上面打开网址为例介绍一下。当选择浏览器打开时,我们打开百度,当选择其他软件打开时,跳转到某一界面(后续操作省略)
首先我们要知道,<inter-filter>标签里可以再配置一个<data>标签,用于更精确地指定当前活动能够响应什么类型的数据。
- android:scheme。用于指定数据的协议部分,如上例的http部分。
- android:host。用于指定数据的主机名部分,如上例中的www.baidu.com部分。
- android:port。用于指定数据的端口部分,一般紧随在主机名之后。
- android:path。用于指定主机名和端口之后的部分,如一段网址中跟在域名之后的内容。
- android:mimeType。用于指定可以处理的数据类型,允许使用通配符的方式进行指定。
只有当<data>标签指定的内容和Intent携带的data内容完全一致时,当前活动才能响应该Intent。
下面的代码表示,当点击上例中按钮时,如果选择浏览器,将产生上例的结果,进入百度官网首页。若选择用该软件打开,则会进入到ThirdActivity。
(即该Intent有两个活动可以对其进行匹配,根据个人选择进行选择)
<activity android:name=".ThirdActivity">
<intent-filter tools:ignore="AppLinkUrlError">
<action android:name="android.intent.action.VIEW" />
<category android:name="android.intent.category.DEFAULT" />
<data android:scheme="http" />
</intent-filter>
</activity>
3. 点击按钮拨号
Button button2 = (Button) findViewById(R.id.button_2);
button2.setOnClickListener(new View.OnClickListener(){
@Override
public void onClick(View v) {
Intent intent_1 = new Intent(Intent.ACTION_DIAL);
intent_1.setData(Uri.parse("tel:10086"));
startActivity(intent_1);
}
});
点击按钮调用系统拨号界面,默认号码10086hhh
Android开发--Intent的使用(1)启动活动的更多相关文章
- 求助帖:android开发初期:为什么我在活动二设置的singInstance模式跑到活动三去了???
求android开发的高手帮我看看这个问题吧: <activity android:name=".SecondActivity" android:label="Th ...
- android 开发 Intent使用技巧点
判断Intent是否为null: if (intent.resolveActivity(getPackageManager())!=null) { //判断Intent是否为null // Inten ...
- Android开发Intent应用概述
原文: http://bbs.gfan.com/android-93448-1-1.html 今天,我们来研究一下Intent,没错,就是前面说过的比较难理解的那个东西,希望通过这篇文章之后,你发现前 ...
- Android开发--Intent的应用
1.概述 Intent负责对应用中一次操作的动作,动作涉及的数据,附加的数据进行描述,起到媒介的作用.通过Intent对象指定一个activity,利用startActivity或 startActi ...
- Android 开发-Intent传递普通字符串
假设A传递id到B中 ActivityA: Intent intent=new Intent(); intent.setClass(ActivityA.this,ActivityB.class) ...
- Android开发--Intent
一:Intent基础知识 Intent:信使,实现四大组件间的通信. 1:实现页面间的跳转,有两种方式: (1):startActivity()方式: (2) 2:使用Intent传递数据的四种方式: ...
- Android学习之基础知识四-Activity活动3讲(Intent的使用)
主活动名称FirstActivity.java改为了MenuTest.java 一.什么是Intent: 1.Intent是Android程序中各组件之间进行交互的重要方式,不仅可以指明当前组件想要进 ...
- android 开发 singleTask启动模式下传值的坑
日常填坑. 做了什么操作引起的?如下: 在活动A 启动模式设置为singleTask ,然后再用活动A启动活动B,活动B启动活动C. 现在我的活动C要使用intent携带值去启动活动A.在活动A中正常 ...
- Android_2015-04-07 Android中Intent的使用
1. 什么是Intent 1.1 Intent是Android程序中各个组件之间进行交互的一种方式,不仅可以指明当前组件想要执行的动作,还可以在不同组件之间传递数据. Intent一般可用于启动活动, ...
随机推荐
- https理论及实践
什么是https协议? http协议以明文的方式在网络中传输,安全性难以保证,https在http协议的基础上加入SSL/TLS层.TLS是SSL协议的最新版本,SSL使用SSL数字证书在通信两端建立 ...
- redpwnctf-web-blueprint-javascript 原型链污染学习总结
前几天看了redpwn的一道web题,node.js的web,涉及知识点是javascript 原型链污染,以前没咋接触过js,并且这个洞貌似也比较新,因此记录一下学习过程 1.本机node.js环境 ...
- 写论文的第五天 hive安装
Hive的安装和使用 我们的版本约定: JAVA_HOME=/usr/local /jdk1.8.0_191 HADOOP_HOME=/usr/local/hadoop HIVE_HOME=/usr/ ...
- jquery实现表格导入到Excel(加图片)
话不多说直接上代码 第一步:导入jquery的插件https://github.com/rainabba/jquery-table2excel HTML部分: 第二步:添加一个按钮 <but ...
- .NET平台下,钉钉微应用开发之:获取userid
工作需求,开发钉钉微应用和小程序,之前有接触过支付宝小程序和生活号的开发,流程没有很大的差别,这里记录下我用ASP.NET MVC实现钉钉微应用的开发,并实现获取用户的userid.小弟我技术有限,本 ...
- C#开发BIMFACE系列7 服务端API之获取文件信息列表
系列目录 [已更新最新开发文章,点击查看详细] 本文详细介绍如何获取BIMFACE平台中所有上传过的文件信息列表. 请求地址:GET https://file.bimface.com/file ...
- JS函数提升和变量提升
1.1什么是函数提升和变量的提升? JS引擎在运行整个JS代码的过程中,分为俩步. 第一步是读取和解析JS代码,第二部是执行. 在引擎解析JS代码的时候,当解析器遇见变量声明(var 变量名)和函数声 ...
- 2019nc#2
A Eddy Walker 题意 你有n个点(0-n-1),按顺序形成一个环,初始时你在0的位子,你随机顺时针走一步或者逆时针走一步, 一旦你走到一个点后,环上所有点都被经过至少一次后,你就必须停下来 ...
- CodeForces 1083 E The Fair Nut and Rectangles 斜率优化DP
The Fair Nut and Rectangles 题意:有n个矩形,然后你可以选择k个矩形,选择一个矩形需要支付代价 ai, 问 总面积- 总支付代价 最大能是多少, 保证没有矩形套矩形. 题解 ...
- WordCount--统计输入文件的字符数、行数、单词数(java)--初级功能
码云地址: https://gitee.com/YuRenDaZ/WordCount 个人PSP表格: PSP2.1 PSP阶段 预估耗时 (分钟) 实际耗时 (分钟) Planning 计划 180 ...