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

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Linux - CentOS 二进制安装 MySQL 8.0.31(非常实用)

一、下载 mysql-8.0.31-linux-glibc2.12-x86_64.tar.xz 下载地址:MySQL :: Download MySQL Community Server (Archived Versions) 具体如下图所示: 二、将 mysql-8.0.31-linux-glibc2.12-x86_64.tar.xz 放入到服务器的 /usr/local (路径可…

C++万字自学笔记

[TOC] 一、 C基础 C的IDE有CLion、Visual Studio、DEV C、eclipse等等&#xff0c;这里使用CLion进行学习。 0. C初识 0.1 第一个C程序 编写一个C程序总共分为4个步骤 创建项目创建文件编写代码运行程序 #include <iostream>int main() {using namespace std;cout…

SpringCloud Alibaba——Ribbon底层怎样实现不同服务的不同配置

目录 一、Ribbon底层怎样实现不同服务的不同配置二、源码角度分析 一、Ribbon底层怎样实现不同服务的不同配置 为不同服务创建不同的spring上下文&#xff0c;不同的spring上下文中存放对应这个服务所有的配置。 二、源码角度分析 SpringClientFactory中可以获取到所有ribbon…

基于MSP432P401R跟随小车(一)【2022年电赛】

文章目录 一、赛前准备1. 硬件清单2. 工程环境 二、赛题思考三、软件设计1. 路程、时间、速度计算2. 距离测量3. 双机通信4. 红外循迹 四、技术交流 一、赛前准备 1. 硬件清单 主控板&#xff1a; MSP432P401R测距模块&#xff1a; GY56数据显示&#xff1a; OLED电机&#x…

7.5 SpringBoot 拦截器Interceptor实战 统一角色权限校验

文章目录 前言一、定义注解annotation二、拦截角色注解1. 在拦截器哪里拦截&#xff1f;2. 如何拦截角色注解&#xff1f;3. 角色如何读取?4. 最后做角色校验 三、应用&#xff1a;给管理员操作接口加注解四、PostMan测试最后 前言 在【7.1】管理员图书录入和修改API&#xf…

原生js实现将图片内容复制到剪贴板

核心代码 /*复制图片*/ copyImg(dom) {/* 警告&#xff1a;dom不能是img标签&#xff0c;建议用DIV标签包裹img标签&#xff0c;否者会报错&#xff01;不支持复制背景图&#xff01; */dom.style.userSelect auto;let selection getSelection(), range document.createRan…

支持向量机(SVM)的超参数调整 C 和 Gamma 参数

作者:CSDN @ _养乐多_ 支持向量机(Support Vector Machine,SVM)是一种广泛应用的监督式机器学习算法。它主要用于分类任务,但也适用于回归任务。在本文中,我们将深入探讨支持向量机的两个重要参数:C和gamma。在阅读本文前,我假设您对该算法有基本的了解,并专注于这些…

从网络安全行业人才需求讲讲【个人规划】

如果你是一名正在找工作的网络安全方向大学生&#xff0c;或者是刚刚踏入网络安全领域的新手&#xff0c;这篇文章很适合你&#xff0c;如果你是一名老网安人&#xff0c;看看有哪些你中招了。 当你打开BOSS直聘、拉钩等招聘类网站后&#xff0c;在首页的快速导航页面很难找到关…

微信小程序安装和使用 Vant Weapp 组件库

微信小程序安装和使用 Vant Weapp 组件库 1. Vant Weapp 介绍2. Vant Weapp 的 安装2.1. 通过npm安装2.2. 构建npm2.3. 修改 app.json2.4. 修改 project.congfig.json2.5. 测试一下&#xff0c;使用Vant Weapp提供的组件 1. Vant Weapp 介绍 Vant 是一个轻量、可靠的移动端组件…

《遗留系统现代化》读书笔记(基础篇)

你现在所写的每一行代码&#xff0c;都是未来的遗留系统 为什么要对遗留系统进行现代化&#xff1f; 什么是遗留系统&#xff1f; 判断遗留系统的几个维度&#xff1a;代码、架构、测试、DevOps 以及技术和工具。时间长短并不是衡量遗留系统的标准。代码质量差、架构混乱、没…

【深度学习笔记】正则化与 Dropout

本专栏是网易云课堂人工智能课程《神经网络与深度学习》的学习笔记&#xff0c;视频由网易云课堂与 deeplearning.ai 联合出品&#xff0c;主讲人是吴恩达 Andrew Ng 教授。感兴趣的网友可以观看网易云课堂的视频进行深入学习&#xff0c;视频的链接如下&#xff1a; 神经网络和…

Django实现简单的音乐播放器 4

在原有音乐播放器功能基础上&#xff0c;增加上传音乐功能。 效果&#xff1a; 目录 配置上传路径 配置路由 视图处理歌曲 引入类库 保存歌曲文件 模板上传 设置菜单列表 设置菜单列表样式 脚本设置 上传效果 1.显示菜单列表 2.点击上传歌曲 3.上传完成 4.查看保…

GEE:计算每个对象的面积、标准差、周长、宽度、高度

作者:CSDN @ _养乐多_ 本文记录了面对对对象分割,以及计算每个对象的面积、标准差、周长、宽度、高度的代码。 文章目录 一、代码一、代码 // 设置种子 var seeds = ee.Algorithms.Image.Segmentation.seedGrid(20)

如何通过 CrossOver 在 Mac 苹果电脑上安装使用 windows 应用程序?

首先我们可以先了解一下什么是 crossOver &#xff0c;CrossOver 是 Mac 和 Windows 系统之间的兼容工具。使 Mac 操作系统的用户可以运行 Windows 系统的应用&#xff0c;从办公软件、实用工具、游戏到设计软件&#xff0c; 您都可以在 Mac 程序和 Windows 程序之间随意切换。…

18.Lucas-Kanade光流及OpenCV中的calcOpticalFlowPyrLK

文章目录 光流法介绍OpenCV中calcOpticalFlowPyrLK函数补充reference 欢迎访问个人网络日志&#x1f339;&#x1f339;知行空间&#x1f339;&#x1f339; 光流法介绍 光流描述了像素在图像中的运动&#xff0c;就像彗星☄划过天空中流动图像。同一个像素&#xff0c;随着时…

MacOS触控板缩放暂时失灵问题解决

我的系统版本为Monterey 12.5.1&#xff0c;亲测有效 直接创建脚本xxx.sh&#xff0c;并在终端执行脚本bash xxx.sh即可解决此问题&#xff0c;脚本内容如下&#xff1a; #!/bin/bashkillall Finder #kill Finder如不需要可以删除 killall Dock #kill Dock 如不需要可以删…

【Maven】Maven下载,配置以及基本概念

文章目录 1. Maven简介2. Maven下载3. Maven环境配置4.Maven的基本概念4.1 仓库4.2 坐标4.3 仓库配置(修改IDEA默认Maven库) 1. Maven简介 Maven是一个Java项目管理工具和构建工具&#xff0c;用于管理项目的依赖关系、构建过程以及项目的部署。它是Apache软件基金会的开源项目…

『表面』在平面模型上提取凸(凹)多边形

原始点云 直通滤波,z轴0~1.1 分割模型为平面&#xff0c;分割结果进行投影 提取多边形 代码: #include <pcl/ModelCoefficients.h> // 模型系数的数据结构&#xff0c;如平面、圆的系数 #include <pcl/io/pcd_io.h>#include <pcl/point_types.h> // 点云数据…

nginx uwsgi配置django

uwsgi文件 [uwsgi] # 服务端口号&#xff0c;这里没有设置IP值&#xff0c;默认是加载服务器的IP地址 #http :5000 socket:8000 # flask项目地址 chdir /pyprogram/electric # wsgi文件 /home/flask_project/mange.py #module app:app wsgi-file/pyprogram/electric/electr…

手搓一台简单的网络损伤仪——弱网测试

1、介绍 支持对链路带宽、传输时延、丢包率和无码率的手动设置&#xff1b; 1.1、网络损伤仪在使用时&#xff0c;网络拓扑连接 1.2、网络损伤仪管理页面展示 2、使用的设备及相关技术栈 一台Intel 赛扬 J1900的迷你主机【拥有4个千兆网口】&#xff1b;ubuntu-18.04.5-live…