Android之Intent

意图介绍 

一个意图(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.hqwc.cn/news/26642.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【Linux C】fseek函数使用小结

0x00 前言 演示使用的Linux版本&#xff08;#cat /etc/issue&#xff09;&#xff1a;Ubuntu 18.04.6 LTS \n \l 最后更新日期&#xff1a;2023.7.17 0x01 fseek函数使用小结 1.函数描述 设置stream文件的位置指针偏移到指定位置1。 2.声明 #include <stdio.h> in…

ceph安装部署

Ceph 简介 存储基础 单机存储设备 单机存储的问题 分布式存储的类型 分布式存储&#xff08;软件定义的存储 SDS&#xff09; Ceph 架构 Ceph 核心组件 ​编辑 Pool中数据保存方式支持两种类型 OSD 存储后端 Ceph 数据的存储过程 Ceph 集群部署 基于 ceph-deploy …

Zookeeper集群

Zookeeper集群 一、Zookeeper 概述Ⅰ、Zookeeper 定义&#xff1a;Ⅱ、Zookeeper 工作机制Ⅲ、Zookeeper 特点Ⅳ、Zookeeper 数据结构Ⅴ、Zookeeper 应用场景Ⅵ、Zookeeper 选举机制 二、部署 Zookeeper 集群Ⅰ、安装前准备Ⅱ、安装Zookeeper 三、部署kafka 集群Ⅰ、下载安装包…

Fiddler抓包使用简介

目录 Fiddler简介 请求抓包 抓取PC端HTTPS请求 抓取移动端请求 请求查看 发送请求 Mock接口 断点调试 弱网模拟 请求重放 修改HOSTS 总结&#xff1a; Fiddler简介 Fiddler是一款免费的Windows平台的抓包工具&#xff0c;功能强大&#xff0c;使用简单。Fiddler抓…

IDEA运行TOMCAT出现404

就这种问题&#xff0c;每个人的原因都不一定一样&#xff0c;我出现这种问题的解决方法在这里记录一下。顺便把我的配置记录一下。 除了本文的问题&#xff0c;还有可能是默认打开的文件名错了&#xff0c;或者端口被占用。 软件版本IDEA2023 TOMCAT9 亲测&#xff1a;IDE…

C语言进阶之程序环境和预处理

程序环境和预处理 1. 程序的翻译环境和执行环境2. 详解编译链接2.1 翻译环境2.2 编译的几个阶段2.3 运行环境 3. 预处理详解3.1 预定义符号3.2 #define3.2.1 #define 定义标识符3.2.2 #define 定义宏3.2.3 #define 替换规则3.2.4 #和##3.2.5 带副作用的宏参数3.2.6 宏和函数对比…

「网络编程」应用层协议_ HTTPS协议学习及原理理解

「前言」文章内容大致是应用层协议的HTTPS协议讲解&#xff0c;续上篇HTTP协议。 「归属专栏」网络编程 「主页链接」个人主页 「笔者」枫叶先生(fy) 目录 一、HTTPS协议介绍二、什么是"加密"三、为什么要加密四、常见的加密方式五、数据摘要 && 数据指纹六、…

STM32 Proteus仿真可设置时间红绿灯-0075

STM32 Proteus仿真可设置时间红绿灯-0075 Proteus仿真小实验&#xff1a; STM32 Proteus仿真可设置时间红绿灯-0075 功能&#xff1a; 硬件组成&#xff1a;STM32F103C6单片机 74HC595串入并出芯片4个2位数码管显示十字路口红绿灯时间多个按键 1.包含机动车指示灯(红、黄、…

JVM类加载

1.什么是类加载 类加载子系统只是负责加载class字节码文件将类信息放至方法区中&#xff0c;至于是否可以运行&#xff0c;是执行引擎负责的事情。 2.类加载的过程 2.1加载 IO读取字节码文件 为每个类创建一个Class类的对象 将此对象存储在方法区中 2.2链接 2.2.1验证 验证…

noSQL的小练习

目录 Redis&#xff1a; 1、 string类型数据的命令操作&#xff1a; 2、 list类型数据的命令操作&#xff1a; 3、 hash类型数据的命令操作&#xff1a; MongoDB&#xff1a; 1. 创建一个数据库 名字grade 2. 数据库中创建一个集合名字 class 3. 集合中插入若…

IIS 部署的应用禁用HTTP TRACE / TRACK方法【原理扫描】

远程Web服务器支持TRACE和/或TRACK方法。 TRACE和TRACK是用于调试Web服务器连接的HTTP方法。 直接在网站Web.config文件中进行如下操作&#xff1a;在Web.config中的<system.webServer>节点内添加以下配置即可&#xff1a; <security> <requestFiltering> &…

Java阶段五Day07

Java阶段五Day07 文章目录 Java阶段五Day07问题解析dubbo和nacos Dubbo负载均衡负载均衡介绍准备一个负载均衡的环境Dubbo负载均衡策略配置负载均衡的方式dubbo配置负载均衡优先级微服务阶段性架构 Spring Boot Starter自定义配置准备一个starter案例项目Spring框架版本迭代案例…