Android之Intent

news2024/11/27 11:49:00

意图介绍 

一个意图(Intent)对象包含了目标组件、动作、数据、类别、附加数据、标志六个部分。

目标组件

目标组件可以帮助应用发送显式意图调用请求。在创建Intent时,可以通过setComponent方法来设置一个组件,如:

//设置组件
intent.setComponent(new ComponentName("com.example.app", 
                                        "com.example.app.MainActivity"));

//ComponentName是一个类,用于表示组件的名称。它包含两个字符串参数:
//第一个参数是应用程序的包名(如 "com.example.app"),
//第二个参数是组件的完整类名(如"com.example.app.MainActivity")。

//setComponent()方法用于将ComponentName对象设置为Intent的组件信息。
//当使用这种方式创建 Intent 时,系统会根据指定的组件名称来启动对应的组件(如Activity、Service或BroadcastReceiver)。

//这里的代码意味着我们要启动一个名为"com.example.app.MainActivity"的Activity,
//该Activity属于"com.example.app"这个应用程序。

如果已知要启动的组件的确切名称,可以使用显式Intent通过设置component来启动该组件。否则,可以使用隐式Intent(通过设置 action、data 和 category),让系统根据 Intent 过滤器来选择合适的组件。 

意图过滤器

动作

动作(Action)是一个字符串,它通常用于表示组件要执行的操作。例如,启动一个Activity、拨打电话、发送短信等等。在创建Intent的时候,可以通过setAction()方法来设置动作

Action是Intent的核心组成部分,它告诉Android系统应该执行什么操作。Android系统预定义了许多标准的Action。但是每个应用都是不同的,Android系统预定义的Action不可能覆盖到所有的需求,所以Android系统还提供了一些自定义的方法。(这里还不是很清楚,可能后续更新)

数据

数据(Data)是指明意图操作的数据,例如要发送的短信内容、要拨打的电话号码等。也就是说,数据通常表示要操作数据的URI,例如,一个网页的URL,一个联系人的URI等等。在创建意图的时候,可以通过setData()方法来设置数据。

类别

类别(Category)是指明意图的附加信息,用于进一步细分和分类意图。

意图过滤器

动作、数据与类别三者在一起可以构建一个意图过滤器。通过意图过滤器用户可以告知系统当前的组件具备哪些特点,可以处理哪些特定的Intent。

附加数据

Intent可以通过附加数据(Extradate)来传递一些额外的信息。附加数据是以键值对的方式存储在意图之中。当使用者想要将一个Activity中的一些信息传递给下一个Activity时,可以在发送Intent前向其中添加数据,而后在接收Intent的组件中提取并使用这些数据。

 1.创建一个Intent对象:首先,创建一个Intent对象,指定目标组件(要启动的Activity或者要启动的Service)。

// 创建一个Intent对象,指定要启动的Activity
Intent intent = new Intent(this, SecondActivity.class);

 2.向Intent中添加数据:使用putExtra()方法将数据添加到Intent对象中。这些数据将以键值对的形式存储,通常将字符串作为键,以便于接收方检索。

// 向Intent中添加数据
intent.putExtra("KEY_STRING", "Hello, World!");
intent.putExtra("KEY_INT", 42);

 3.发送Intent:使用startActivity()或者startService()方法将Intent发送到指定的组件中。系统会将Intent传递给目标组件,该组件可以从中提取出所需的数据。

// 使用startActivity()方法启动新的Activity
startActivity(intent);

4.在目标组件中接收并处理Intent:目标组件可以通过调用特定的方法获取传递过来的Intent对象,然后通过getStringExtra()或getIntExtra()等方法从Intent中提取数据。

// 在SecondActivity中获取传递过来的Intent对象
Intent receivedIntent = getIntent();

// 从Intent中提取数据
String stringValue = receivedIntent.getStringExtra("KEY_STRING");
int intValue = receivedIntent.getIntExtra("KEY_INT", 0); // 第二个参数为默认值

标志

标志(Flags)是用于修改Intent行为的标记。通过设置不同的标志,可以改变Intent的启动方式、任务栈行为、数据传递方式等。

显式意图与隐式意图

所谓的显式意图是指明确指定了目标组件的Intent。也就是说,你知道要启动的组件的名称或类的完整路径。通过显式意图,你可以直接启动目标组件。

Intent intent = new Intent(CurrentActivity.this, TargetActivity.class);
startActivity(intent);

隐式意图是指没有明确指定目标组件的意图。相反,你可以指定一些操作、数据类型或其他条件,然后系统会根据这些条件来查找合适的组件来处理该意图。例如,你可以创建一个隐式意图来打开网页:

Intent intent = new Intent(Intent.ACTION_VIEW, Uri.parse("http://www.example.com"));
startActivity(intent);

在这个例子中,你没有指定具体的目标组件,而是指定了一个动作(ACTION_VIEW)和一个数据(网页的URL),系统会查找合适的组件来处理这个意图,可能是浏览器应用。

显式意图和隐式意图在Android开发中都非常常见,具体使用哪种意图取决于你的需求和场景。显式意图适用于明确知道目标组件的情况,而隐式意图适用于希望系统根据条件选择合适的组件的情况。

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

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

相关文章

19.基于XML的自动装配

基于XML的自动装配 自动装配: 根据指定的策略,在IOC容器中匹配某一个bean,自动为指定的bean中所依赖的类类型或接口类型属性赋值 使用bean标签的autowire属性设置自动装配效果(默认为no和defalse不进行装配——bean中的属性不会自动匹配某个b…

Nodejs的字节操作(Buffer)

Hi I’m Shendi Nodejs的字节操作(Buffer) 字节操作是一个编程语言中必不可少的,而在NodeJs中也可以很方便的进行字节操作。 Buffer类 在 js 中没有二进制数据类型,但在一些情况下必须使用到二进制数据类型,比如网络通…

ModaHub魔搭社区:AI原生云向量数据库Zilliz Cloud与 OpenAI 集成搭建相似性搜索系统

目录 准备工作 检索图书 本文将讨论如何使用 OpenAI 的 Embedding API 与 Zilliz Cloud 搭建相似性搜索系统。 在本篇中你将看到如何使用 OpenAI 的 Embedding API 和 Zilliz Cloud 完成图书检索。当前,很多的图书检索方案,包括公共图书馆里使用的那些方案,都是使用关键词…

简单认识MySQL数据库事务

文章目录 一、MySQL事务的概念1、简介2、事务的ACID特点1.原子性(Atomicity)2.一致性(Consistency)3.隔离性(lsolation)4.持久性(Durability) 3、并发访问表的一致性问题和事务的隔离级别1.并发…

C# Modbus通信从入门到精通(6)——Modbus RTU(0x04功能码)

1、04(0x04)读输入寄存器 使用该功能码能从远程地址中读取1到125个输入寄存器的值,每个输入寄存器都占两个字节,读取的输入寄存器数量由主站读取时指定。 2、发送报文格式 更详细的格式如下: 从站地址+功能码+起始地址高位+起始地址低位+寄存器数量高位+寄存器数量低位+…

备战求战 | 笔试强训6

目录 一、选择题 二、编程题 三、选择题题解 四、编程题题解 一、选择题 1、十进制变量i的值为100&#xff0c;那么八进制的变量i的值为&#xff08;&#xff09; A. 146 B. 148 C. 144 D. 142 2、执行下面语句后的输出为 int I1; if(I<0)printf("****\n") …

全志F1C200S嵌入式驱动开发(串口驱动)

【 声明:版权所有,欢迎转载,请勿用于商业用途。 联系信箱:feixiaoxing @163.com】 对于uboot、kernel和rootfs来说,他们的串口输出一般都是uart0。一般这么做,是没有问题的。只不过我们自己买的这块f1c200s电路板,设计者把uart转ttl的接口,改接到了uart1上面。…

自定义注解+AOP完成公共字段填充

在开发中&#xff0c;我们的实体类经常会有几个公共的字段&#xff0c;如下图的创建时间&#xff0c;修改时间就为各个类共有的字段&#xff1a; 目前项目中处理这些字段都是在每一个业务方法中进行赋值操作,如下: 如果都按照上述的操作方式来处理这些公共字段, 需要在每一个业…

中级课程——信息收集(完结)

文章目录 概要whois备案号警告CDN历史解析查询子域名查询后台目录指纹C段&#xff0c;旁站真实IP与CDN端口证书其他资产社工漏洞情报实操案例 概要 whois 备案号 警告 CDN历史解析查询 子域名查询 工具推荐 或者找在线工具 后台目录 指纹 C段&#xff0c;旁站 真实IP与CDN 端…

无符号数和数据类型转换

无符号数 字符类型的无符号值&#xff1a; 所有的数据底层都是采用二进制来保存&#xff0c;而第一位用于保存符号位&#xff0c;当不考虑符号位时&#xff0c;所有的数都按照数值进行保存 #include <stdio.h>int main() {unsigned char a -65;printf("%u"…

JVM结构-堆

堆不是一种数据结构&#xff08;什么结构都可以存放在堆中&#xff09;堆内存的大小是可以调节的。类加载器读取了类文件后&#xff0c;需要把类、方法、常变量放到堆内存中&#xff0c;保存所有引用类型的真实信息JVM堆被同一个JVM实例中的所有Java线程共享JVM堆通常由某种自动…

Redis的过期策略以及内存淘汰机制

目录 一、过期策略1.1、定时删除1.1.1、过期1.1.2、过期的 key 集合1.1.3、定时扫描策略1.1.4、 Redis 中所有的 key 在同一时间过期了&#xff0c;会出现怎样的结果1.1.5、从库的过期策略 1.2、惰性删除1.3、定时删除和惰性删除的总结 二、缓存淘汰算法2.1、缓存淘汰算法概述2…

mysql 备份

mysql 备份 1. 备份的类型2.备份的类容3. 备份工具1&#xff1a;MySQL自带的备份工具2&#xff1a;文件系统备份工具3&#xff1a;其他工具 4:备份的策略1. 直接拷贝数据库文件2. mysqldump备份数据库3. mydumper备份数据库4.lvm快照从物理角度实现几乎热备的完全备份&#xff…

【Dart】006-类的定义和使用

【Dart】006-类的定义和使用 文章目录 【Dart】006-类的定义和使用一、类的定义1、概述2、简单定义与实例化代码示例运行结果 3、成员方法代码示例运行结果箭头函数写法 4、get 与 set 关键字概述代码示例运行结果 二、类的构造方法1、特点2、完整版的构造方法简化版完整版 3、…

关于K8s的Pod的详解(一)

关于K8s的Pod的详解&#xff08;一&#xff09; Pod和API server的通信加快Pod启动更改Pod的资源Pod 的持久卷的单个访问模式Pod 拓扑分布约束Pod 拓扑分布中的最小域数 Pod 作为k8s创建&#xff0c;调度&#xff0c;管理的基本单位。由上级的Controller对Node上安装的Kubelet发…

最全整理,Pytest自动化测试框架-用例参数/忽略用例/失败重试(实战)

目录&#xff1a;导读 前言一、Python编程入门到精通二、接口自动化项目实战三、Web自动化项目实战四、App自动化项目实战五、一线大厂简历六、测试开发DevOps体系七、常用自动化测试工具八、JMeter性能测试九、总结&#xff08;尾部小惊喜&#xff09; 前言 测试用例参数化 …

一零六四、世界杯数据可视化分析(阿里云天池赛)

目录 赛制官方链接 活动背景 活动时间&#xff1a;即日起-12月31日17点 数据说明 世界杯成绩信息表&#xff1a;WorldCupsSummary 世界杯比赛比分汇总表&#xff1a;WorldCupMatches.csv 世界杯球员信息表&#xff1a;WorldCupPlayers.csv 代码实现 赛制官方链接 世界杯…

LitePal数据库的可视化

依赖 implementation com.amitshekhar.android:debug-db:1.0.0 输入adb forward tcp:8080 tcp:8080 run项目然后浏览器输入 localhost:8080 (保证手机和电脑出于相同wifi下) 效果 点击表格中的数据还可以进行数据的编辑和删除操作

x86架构ubuntu22下运行NDS模拟器DeSmuME

0. 环境 i7 ubuntu22 1. 获取源码 浏览器打开https://github.com/TASEmulators/desmume/releases&#xff0c;下载源码压缩包。 解压 tar -zvxf desmume-release_0_9_13.tar.gz cd desmume-release_0_9_13 2. 源码编译 2.1 build GTK2 or SDL2 frontend with autotools 配置…

【缺陷报告】缺陷报告怎样写会好一些?

目录 标题 描述或总结 影响 前置条件 重现步骤 结果 优先级 重现频率   附件 变通方案&#xff08;Workaround&#xff09; 发生原因分析&#xff08;Root Cause Analysis&#xff09; 环境配置 &#x1f381;更多干货 标题 1. 首先要做一个“标题党”&#xff…