Intent与IntentFilter

news2024/11/20 4:24:39

在Android程序中,一般应用程序是由多个核心组件构成的。如果用户用户需要从一个Intent切换到另一个Activity,则必须使用Intent。实际上,Activity,Service和BroadcastReceiver这3种核心组件都需要使用Intent进行操作,Intent用于相同或者不同的应用程序组件间的绑定

一、Intent与IntentFilter

Intent为意图,是程序各组件间进行交互的一种重要方式,它不仅可以指定当前组件要求执行的动作,还可以在不同组件之间进行数据传递,一般用于启动Activity和Service和发送广播等。根据开启目标组件方式的不同,Intent分为两种类型,分别是显式Intent隐式Intent

(一)显式Intent

显式Intent指直接指定目标组件。

Intent intent=new Intent(MainActivity.this,MainActivity2.class);
startActivity(intent);
//上述代码中,创建的Intent对象中传入了2个参数,其中第1个参数表示当前Activity,第2个参数表示要跳转到的目标Activity
        
Intent intent=new Intent();
intent.setClass(MainActivity.this,MainActivity2.class);
startActivity(intent);

(二)隐式Intent(IntentFilter)

1.匹配规则

(1)action规则:

IntentFilter中可有1~N个action属性;必有一个

Intent中有1个action属性,且Intent中action需与IntentFilter中任意一个匹配

IntentFilterAction(1~N个) >= IntentAction(1个)

(2)data规则

data由TypeURL两部分组成,全相同才匹配。

IntentFilter中可有0~N个data属性;可没有

Intent中有0~1个data属性,如IntentFilter有data则Intent中必有,且Intent中data需与IntentFilter中任意一个匹配

IntentFilterData(0~N个) >= IntentData(0~1个) 且IntentFilter有data则Intent中必有

(3)category规则

IntentFilter中可有1~N个category属性;必有一个"android.intent.category.DEFAULT"

Intent中有0~N个category属性,默认的category无需添加(自带),且Intent中category需全为IntentFilter中有的

IntentFilterCategory(1~N个) >= IntentCategory(0~N个)

2.隐式启动

如果想使外部程序隐式启动该Activity需将exported属性设为true

<activity
    android:name=".MainActivity"
    android:exported="true">

</activity>

3.Intent中添加属性

(1)添加action,data,category属性
Intent intent=new Intent();
//活动
intent.setAction(" ~ ");
//数据及类型
intent.setDataAndType( url , "type" );
//分类;默认category无需添加
intent.addCategory(" ~ ");


//跳转
startActivity( intent );
(2)获取Intent中data属性的信息
Intent intent=getIntent();
URL url=intent.getData();

4.IntentFilter中添加属性

<activity
    android:name=".MainActivity"
    android:exported="true">
<!-- 设置android:exported="true"使其他程序可以隐式启动该Activity !-->

    <intent-filter>

        <action android:name="android.intent.action.MAIN" />

        <data android:mimeType=" " android:scheme=" "/>

        <category android:name="android.intent.category.DEFAULT" />
<!-- 必需添加默认的category属性"android.intent.category.LAUNCHER" !-->

    </intent-filter>
</activity>

二、Activity之间的数据传递

1.使用Intent的 putExtra() (额外的)方法传递数据

由于Activity之间需要传递不同类型的数据,所以Android提供了多个重载的putExtra()方法,重载的 putExtra(String name,value)方法都包含2个参数,参数name表示传递的数据名称,参数value表示传递的数据信息
通过putExtra()方法传递的数据存储在Intent对象后,如果想获取该数据,可以通过getXXXExtral()方法来实现。

Intent intent=new Intent(MainActivity.this,MainActivity2.class);
intent.putExtra("studentName","王可");
intent.putExtra("englishScore",98);
intent.putExtra("isPassed",true);
startActivity(intent);
        

//获取Intent
Intent intent=getIntent();
//获取字符串,无值则返回Null
String student_name=intent.getStringExtra("studentName");
//获取int boolean,无值则返回默认值(第二个参数)
int english_score=intent.getIntExtra("englishScore",0);
boolean is_passed=intent.getBooleanExtra("isPassed",false);

2.使用Bundle (捆)传递数据

Bundle类与Map接口类似,都是通过键值对的形式保存数据
首先使用Bundle对象存储数据.put…("name",value),然后调用putExtras()将Bundle对象封装进Intent对象中。可通过getExtras()获取Intent中的Bundle对象;使用getXXX()获取Bundle对象中的键值。

Intent intent=new Intent(MainActivity.this,MainActivity2.class);
//创建Bundle对象
Bundle bundle=new Bundle();
bundle.putString("studentName","王可");
bundle.putInt("englishScore",98);
bundle.putBoolean("isPassed",true);
//向Intent中添加Bundle对象
intent.putExtras(bundle);
startActivity(intent);


//获取Intent
Intent intent=getIntent();
//获取Bundle对象
Bundle bundle=intent.getExtras();
String student_name=bundle.getString("studentName");
int english_score=bundle.getInt("englishScore",0);
boolean is_passed=bundle.getBoolean("isPassed",false);

三、Activity之间的数据回传

当从MainActivity界面跳转到SeandActirity界面时,需要在SecondActivity界面上进行一些
操作,当关闭SecondActivity界面时,需要从该界面返回一些数据到MainActivity界面。

1.startAcivityForResult()方法

用于开启一个Activity,当开启的Activity被销毁时,会从销毁的Activity中返回数据
startActivity For Result(Intent intent,int requestcode)
intent  表示意图对象。
requestCode  表示请求码,用于标识请求的来源。如有2个按钮可转到Accivity2,可根据清求码区分是由哪个按钮跳转的。

2.setResult()方法

用于携带数据回传。
setResult(int resultCode,Intent intent)
resultcode  表示返回码,用于标识返回的数据 来自于哪个Activity。
intent  用于携带数据。

3.重写 onActivityResult()方法

用于接收回传的数据
protected void on ActivityResult( int requestCode,int resultCode,Intent data)
resquestcode  表示请求码
resultCode  表示回传码
data  表示回传的数据

4.实例

//Activity1中
Intent intent=new Intent(Activity1.this,Activity2.class);
startActivityForResult(intent,1);


//Activity2中
Intent intent_data=new Intent();
intent.putExtra("data","hello");
//设置回传数据
setResult(2,intent_data);
//销毁Activity2(销毁后才会回传数据)
finish();


//Activity1中重写---接收回传数据
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    super.onActivityResult(requestCode, resultCode, data);
    //判断请求码和回传码
    if (requestCode == 1 && resultCode == 2) {
        String str = data.getStringExtra("data");
        ... ...
    }
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1149742.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

老胡的周刊(第113期)

老胡的信息周刊[1]&#xff0c;记录这周我看到的有价值的信息&#xff0c;主要针对计算机领域&#xff0c;内容主题极大程度被我个人喜好主导。这个项目核心目的在于记录让自己有印象的信息做一个留存以及共享。 &#x1f3af; 项目 bililive-go[2] Bililive-go 是一个支持多种…

数据库数据恢复—NTFS分区损坏的SqlServer数据库数据恢复案例

SqlServer数据库数据恢复环境&#xff1a; 一台服务器&#xff0c;windows操作系统NTFS文件系统&#xff0c;运行了12个sqlserver数据库。 SqlServer数据库故障&#xff1a; 根据用户描述&#xff0c;故障情况是工作人员误操作导致服务器硬盘上sqlserver数据库所在分区损坏。经…

堆栈与队列算法-以链表来实现堆栈

目录 堆栈与队列算法-以链表来实现堆栈 C代码 堆栈与队列算法-以链表来实现堆栈 虽然以数组结构来制作堆栈的好处是制作与设计的算法都相当简单&#xff0c;但若堆栈本身是变动的话&#xff0c;则数组大小无法事先规划声明。这时往往必须考虑使用最大可能性的数组空间&#…

sql-50练习题11-15

sql-50练习题11-15 前言数据库表结构介绍学生表课程表成绩表教师表 1-1 查询没有学全所有课程的同学的信息1-2 查询至少有一门课与学号为01的同学所学相同的同学的信息1-3 查询和1号的同学学习的课程完全相同的其他同学的信息1-4 查询没学过张三老师讲授的任一门课程的学生姓名…

软考口诀记忆

结构型的是桥代理组装适配器&#xff0c;享元回家装饰外观。 功适准互依安 使理学操 靠成容恢 维分改稳测 效时资 移适安一替

【JavaScript 】DOM操作快速入门

目录 1.概述 2.操作 2.1.document对象 2.2.选中元素 2.2.1.get 2.2.2.query 2.3.操作属性 2.4.添加响应 2.5.修改文本 1.概述 在Web开发中&#xff0c;JavaScript&#xff08;JS&#xff09;的DOM&#xff08;Document Object Model&#xff0c;文档对象模型&#xf…

什么时候应该将方法声明为虚拟函数

如题&#xff0c;什么时候需要将一个类的方法声明为虚函数(virtual)&#xff0c;这个问题涵盖技术和哲学两个层面。 从技术角度来说&#xff0c;如果你希望在运行阶段(而非编译阶段)根据对象的实际类型来调用方法时&#xff0c;就需要将它声明为一个虚拟函数。 但还有一个哲学…

一碗航天品质中国面:康师傅的民族传承与味道引领

在变幻莫测的食品市场&#xff0c;品牌要保持长久领先的秘诀&#xff0c;还是在品质。 在人类工业领域&#xff0c;堪称品质“天花板”的&#xff0c;“军工品质”算一个&#xff0c;“航天品质”则更胜一筹。 而作为行业龙头&#xff0c;康师傅携手中国航天事业已有7年。 硬…

品牌加盟商做信息展示预约小程序的效果如何

很多行业都有中部或头部品牌&#xff0c;对实体品牌企业来说想要快速高效发展&#xff0c;除了多地直营店外还需要招募加盟商进而提升生意营收。 因此线上渠道变得尤为重要&#xff0c;除了网站外&#xff0c;小程序是连接多平台生态很好的工具&#xff0c;随时打开、直接触达…

Kubernetes 概述以及Kubernetes 集群架构与组件

目录 Kubernetes概述 K8S 是什么 为什么要用 K8S K8S 的特性 Kubernetes 集群架构与组件 核心组件 Master 组件 Node 组件 ​编辑 Kubernetes 核心概念 常见的K8S按照部署方式 Kubernetes概述 K8S 是什么 K8S 的全称为 Kubernetes,Kubernetes 是一个可移植、可扩…

基于SSM的在校学习网站设计与实现

末尾获取源码 开发语言&#xff1a;Java Java开发工具&#xff1a;JDK1.8 后端框架&#xff1a;SSM 前端&#xff1a;采用JSP技术开发 数据库&#xff1a;MySQL5.7和Navicat管理工具结合 服务器&#xff1a;Tomcat8.5 开发软件&#xff1a;IDEA / Eclipse 是否Maven项目&#x…

代码浅析DLIO(一)---整体框架梳理

0. 简介 我们刚刚了解过DLIO的整个流程&#xff0c;我们发现相比于Point-LIO而言&#xff0c;这个方法更适合我们去学习理解&#xff0c;同时官方给出的结果来看DLIO的结果明显好于现在的主流方法&#xff0c;当然指的一提的是&#xff0c;这个DLIO是必须需要六轴IMU的&#x…

基于SpringBoot的二手车交易系统的设计与实现

目录 前言 一、技术栈 二、系统功能介绍 管理员功能实现 商家管理 公告信息管理 论坛管理 商家功能实现 汽车管理 汽车留言管理 论坛管理 用户功能实现 汽车信息 在线论坛 公告信息 三、核心代码 1、登录模块 2、文件上传模块 3、代码封装 前言 如今社会上各行…

中科驭数北京新址揭幕,中关村壹号热土不变

因研发和运营团队规模增长&#xff0c;原办公空间已不能满足需求&#xff0c;近日中科驭数北京中关村办公室从中关村壹号A3座搬迁至中关村壹号D2座。 中科驭数自成立以来&#xff0c;一直专注聚焦算力基础设施核心芯片研发&#xff0c;是DPU芯片领域的国家专精特新小巨人企业&…

Mybatis查树的两种写法

Mybatis查树必须会&#xff0c;它有两种写法&#xff1a; 1、联表查询。只访问一次数据库。 2、递归查询。访问多次数据库。 1、联表查询&#xff08;推荐&#xff09; 表结构&#xff1a; create table common_region (region_id int(11),pr_region_id int(11),region_name …

1300*C. Social Distance(贪心构造)

Problem - 1367C - Codeforces 解析&#xff1a; 统计出所有连续0序列&#xff0c;并且记录其左右两侧有没有1&#xff0c;然后对于四种情况分别判断即可。 #include<bits/stdc.h> using namespace std; int t,n,k; signed main(){scanf("%d",&t);while(…

Leetcode刷题详解——最小路径和

1. 题目链接&#xff1a;64. 最小路径和 2. 题目描述&#xff1a; 给定一个包含非负整数的 *m* x *n* 网格 grid &#xff0c;请找出一条从左上角到右下角的路径&#xff0c;使得路径上的数字总和为最小。 **说明&#xff1a;**每次只能向下或者向右移动一步。 示例 1&#xf…

一共就五个名额,三个全给一个人?我表示不理解

我对csdn举办的#你写过的最蠢的代码是/这个话题的活动表示质疑&#xff01;&#xff01;&#xff01;&#xff01; 先来看看评选规则&#xff1a; 再来看看评分标准&#xff1a; 接下来看看获奖选手&#xff1a; 这三人有啥区别&#xff1f;

Seata入门系列【16】XA模式入门案例

1 前言 在之前&#xff0c;我们试过了AT、TCC 模式&#xff0c;Seata 还支持XA 模式。 2 XA 协议 XA协议由Tuxedo首先提出的&#xff0c;并交给X/Open组织&#xff0c;作为资源管理器&#xff08;数据库&#xff09;与事务管理器的接口标准。Oracle、Informix、DB2和Sybase等…