【Android】Intent基础用法及作用
文章目录
- 使用Intent在活动中穿梭
- 组成
- 显式Intent
- 隐式Intent
- 显式与隐式区别
- 作用
- 活动间传递数据
- 向下一个活动传递数据
- 返回数据给上一个活动
使用Intent在活动中穿梭
Intent(意图)是一种重要的消息传递对象,用于在不同组件(如活动(Activity)、服务(Service)、广播接收器(BroadcastReceiver)等)之间进行通信和交互。
组成
Intent 主要由以下几个部分组成:
- Action:表示要执行的操作,比如
ACTION_VIEW、ACTION_SEND等。 - Data:表示要操作的数据,通常是一个 URI。
- Category:表示 Intent 的类型,比如
CATEGORY_LAUNCHER、CATEGORY_DEFAULT等。 - Extras:表示附加的信息,可以通过
putExtra()方法添加键值对。
显式Intent
-
用于在应用内部启动组件(如Activity、Service、BroadcastReceiver)。显式Intent会指定要启动的组件的类名,例如:
button1.setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View v) {// 创建一个从 MainActivity 到 SecondActivity 的 IntentIntent intent = new Intent(MainActivity.this, SecondActivity.class);// 启动 SecondActivitystartActivity(intent);}});创建一个
Intent对象,用于启动SecondActivity。Intent的第一个参数是当前的Context(即MainActivity.this),第二个参数是要启动的目标Activity类(即SecondActivity.class)。
隐式Intent
- 用于在不指定组件名称的情况下启动组件,而是通过指定动作(Action)、数据(Data)和类型(Type)等信息,让系统去匹配合适的组件。
- 启动
activity
在标签中添加下面代码:
<activityandroid:name=".SecondActivity"android:exported="true"android:theme="@style/Theme.AppCompat.DayNight.DialogWhenLarge"><intent-filter><!-- 指定动作为 com.example.menutest_716.SecondActivity --><action android:name="com.example.menutest_716.SecondActivity" /><!-- 添加默认分类 --><category android:name="android.intent.category.DEFAULT" /><!-- 添加自定义分类 com.example.menutest_716.MY_CATEGORY --><category android:name="com.example.menutest_716.MY_CATEGORY" /></intent-filter>
</activity>
Button button5 = findViewById(R.id.button5);
button5.setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View v) {// 创建一个隐式 Intent,指定动作为 com.example.menutest_716.SecondActivityIntent intent = new Intent("com.example.menutest_716.SecondActivity");// 添加自定义分类 com.example.menutest_716.MY_CATEGORYintent.addCategory("com.example.menutest_716.MY_CATEGORY");// 启动符合条件的 ActivitystartActivity(intent);}
});
- 打开网页
button6.setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View v) {// 创建一个新的 Intent,动作为 ACTION_VIEWIntent intent = new Intent(Intent.ACTION_VIEW);// 设置 Intent 的数据为指定的 URI,这里是打开百度网站的示例intent.setData(Uri.parse("http://www.baidu.com"));// 启动能够处理此 Intent 的 ActivitystartActivity(intent);}
});
- 拨打电话
button8.setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View v) {// 创建一个拨号的 IntentIntent intent = new Intent(Intent.ACTION_DIAL);// 设置 Intent 的数据为要拨打的电话号码intent.setData(Uri.parse("tel:10086"));// 启动该 Intent,跳转到系统的拨号界面startActivity(intent);}
});
显式与隐式区别
- 目的:显式Intent用于精确指定要启动的组件,通常在应用内部使用;隐式Intent用于请求系统启动能够处理指定动作或数据类型的任何组件。
- 使用方式:显式Intent直接指定组件类名,而隐式Intent通过设置动作、数据等信息间接指定要启动的组件,系统会根据匹配规则找到合适的组件处理请求。
作用
- 组件通信:Intent 允许应用程序的不同组件(如活动、服务、广播接收器)之间进行通信。通过发送Intent,一个组件可以请求另一个组件执行特定的操作或返回结果。
- 启动活动:当你需要从一个活动跳转到另一个活动时,可以使用Intent来启动目标活动。这使得应用程序的导航更加灵活和动态。
- 启动服务:服务是后台运行的组件,通常用于执行长时间运行的操作,如下载文件或播放音乐。通过Intent,你可以启动或绑定到一个服务,并与之交互。
- 发送广播:广播是一种消息传递机制,允许应用程序向系统或应用程序的其他部分发送消息。Intent 可以用于发送和接收广播,从而实现应用程序之间的通信。
- 数据传输:Intent 可以携带数据(如字符串、URI、文件等),这使得数据可以在不同的组件之间传递。这对于实现复杂的交互和数据共享非常有用。
- 隐式Intent:隐式Intent不指定具体的组件,而是通过定义一个操作(action)、数据类型(data)和类别(category)来请求系统执行相应的操作。这使得应用程序可以更灵活地与其他应用程序或系统服务交互。
- 显式Intent:显式Intent直接指向特定的组件,如某个活动或服务。这使得开发者可以精确控制应用程序的行为和交互。
活动间传递数据
向下一个活动传递数据
有两个活动:MainActivity 和 SecondActivity,要从 MainActivity 向 SecondActivity 传递数据。
在 MainActivity 中:
- 创建一个
Intent对象,并使用putExtra方法添加要传递的数据。 - 使用
startActivity方法启动SecondActivity。
Button button3 = findViewById(R.id.button3);button3.setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View v) {String data = "祝你开心永远";Intent intent = new Intent(MainActivity.this, SecondActivity.class);intent.putExtra("extra_data",data);startActivity(intent);}});
在 SecondActivity 中:
- 在
onCreate方法中获取传递过来的数据。
@Override
protected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_second);// 获取传递的数据Intent intent = getIntent();String value = intent.getStringExtra("key");
}
返回数据给上一个活动
在 Android 中,如果我们需要从一个活动返回数据给上一个活动,可以使用 startActivityForResult 方法启动目标活动,并在目标活动中设置结果数据。
在 MainActivity 中:
- 使用
startActivityForResult方法启动SecondActivity。 - 重写
onActivityResult方法来接收返回的数据。
// 启动 SecondActivity 并请求返回结果
Intent intent = new Intent(MainActivity.this, SecondActivity.class);
startActivityForResult(intent, 1);// 重写 onActivityResult 方法来接收返回的数据
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {super.onActivityResult(requestCode, resultCode, data);if (requestCode == 1 && resultCode == RESULT_OK) {// 从返回的 Intent 中获取数据String result = data.getStringExtra("result_key");// 处理返回的数据}
}
在 SecondActivity 中:
- 创建一个
Intent对象,并使用putExtra方法添加要返回的数据。 - 使用
setResult方法设置结果,并传入包含数据的Intent。 - 调用
finish方法关闭当前活动。
// 创建一个 Intent 对象并添加要返回的数据
Intent returnIntent = new Intent();
returnIntent.putExtra("result_key", "result_value");// 设置结果并传入包含数据的 Intent
setResult(RESULT_OK, returnIntent);// 关闭当前活动
finish();
如有错误烦请指正
感谢您的阅读
相关文章:
【Android】Intent基础用法及作用
文章目录 使用Intent在活动中穿梭组成显式Intent隐式Intent显式与隐式区别作用 活动间传递数据向下一个活动传递数据返回数据给上一个活动 使用Intent在活动中穿梭 Intent(意图)是一种重要的消息传递对象,用于在不同组件(如活动&…...
Web开发:ASP.NET CORE的后端小结(基础)
1.后端重定向到指定路由 public IActionResult Index(){return RedirectToAction("Index", "Main");//重定向>Main/Index} 【备注】如果在MainController的Index方法中return View();本质是 return View("Index"),返回和方法同名的…...
侧开知识点合集2
一、try .... catch.. AccessViolationException异常触发后,下列程序的输出结果为 static void Main(string[] args) { try { throw new AccessViolationException(); Console.WriteLine("error1"); } catch (Exception e) { Console.WriteLi…...
ARM/Linux嵌入式面经(十六):蔚来嵌入式一二三面面经
文章目录 static作用,局部static和全局static区别TCP三次握手Linux虚拟内存指针引用区别C++内存分区new/delete和malloc/free区别职业规划为什么选择蔚来介绍一下项目然后问我有没有内核级别开发经验,我说没有什么情况进入内核态一、主动式二、被动式三、其他方式注意事项示例…...
Apache BookKeeper 一致性协议解析
导语 Apache Pulsar 是一个多租户、高性能的服务间消息传输解决方案,支持多租户、低延时、读写分离、跨地域复制(GEO replication)、快速扩容、灵活容错等特性。Pulsar 存储层依托于 BookKeeper 组件,所以本文简单探讨一下 BookK…...
Solana的账户模型
Solana的账户模型与其他区块链平台(如以太坊)有所不同,其设计旨在提高性能和扩展性。以下是Solana账户模型的主要特点和工作原理: Solana账户模型概述 账户类型: 普通账户(User Accounts)&…...
iPython与Matplotlib:数据可视化的秘籍
iPython与Matplotlib:数据可视化的秘籍 前言 欢迎来到"iPython与Matplotlib:数据可视化的秘籍"教程!无论你是数据可视化新手还是希望提升技能的专业人士,这里都是你开始的地方。让我们开始这段数据可视化之旅吧&#…...
做一只勤劳的小蜜蜂
机缘 成为创作者的初心,对我而言,是一个融合了个人兴趣、职业成长以及对知识传播热爱的复杂而纯粹的情感交织。回顾这段旅程的起点,几个核心驱动力始终引领着我前行: 1、记录与反思:在职业生涯的早期,我遇…...
如何处理 PostgreSQL 中死锁的情况?
🍅关注博主🎗️ 带你畅游技术世界,不错过每一次成长机会!📚领书:PostgreSQL 入门到精通.pdf 文章目录 如何处理 PostgreSQL 中死锁的情况?一、认识死锁二、死锁的症状三、死锁的检测四、预防死锁…...
新版本 idea 创建不了 spring boot 2 【没有jkd8选项】
创建新项目 将地址换成如下 https://start.aliyun.com/...
linux系统和windows系统如何同步时间,服务器时间变动怎么同步
一、Linux系统时间同步 1. 使用NTP(网络时间协议) NTP是最常用的Linux系统时间同步方式。NTP通过连接到外部时间服务器(如原子钟或GPS接收器)来获取高精度的时间信息,并校准本地系统时间。 步骤: 安装N…...
Mac M1安装配置Hadoop+Flink SQL环境
Flink 1.18.1 Hadoop 3.4.0 一、准备工作 系统:Mac M1 (MacOS Sonoma 14.3.1) JDK:jdk1.8.0_381 (注意:尽量一定要用JDK8,少用高版本) Scala:2.12 JDK安装在本机的/opt/jdk1.8.0_381.jdk/C…...
【所谓生活】马太效应
简介 马太效应又称马太定律或两级分化现象。该效应描述的是在社会生活中,强者因为优势而获得更多机会,而弱者因劣势而失去机会,最终导致强者愈强、弱者愈弱的现象。这一概念最早由美国社会学家罗伯特莫顿于1968年提出,其名字来源…...
品牌进行电商数据采集的流程
品牌在进行数据分析与渠道管控时,均离不开电商数据的有力支撑,故而数据采集的质量举足轻重。电商数据采集首先要确保准确率,其次要保障覆盖率,即页面上呈现的商品信息必须采集完整,否则难以得出精确的数据分析成果&…...
面试问题:React基本概念,和所遇到的CPU和IO问题
在官方文档里面可以看见React基本设计概念,React是用 JavaScrip构建快速响应的大型Web应用程序的首选方式,但是快速响应用一定的是依赖,CPU的性能和IO的约束。 首先CPU性能原因:大部分浏览器的刷新频率为60HZ,及16.6ms…...
FOG Project 文件名命令注入漏洞复现(CVE-2024-39914)
0x01 产品简介 FOG是一个开源的计算机镜像解决方案,旨在帮助管理员轻松地部署、维护和克隆大量计算机。FOG Project 提供了一套功能强大的工具,使用户能够快速部署操作系统、软件和配置设置到多台计算机上,从而节省时间和精力。该项目支持基于网络的 PXE 启动、镜像创建和还…...
JavaScript 表单
JavaScript 表单 JavaScript 是一种广泛应用于网页开发的编程语言,它能够让网页变得更加动态和交互式。在网页设计中,表单是一个重要的组成部分,它允许用户输入数据并将其提交到服务器。JavaScript 可以用来增强表单的功能,提供更好的用户体验。本文将详细介绍如何使用 Ja…...
python程序设定定时任务
在 Windows 系统上,您可以使用任务计划程序(Task Scheduler)来设置定时任务,执行 Python 文件。以下是具体步骤: 步骤 1:准备 Python 文件 假设有一个名为 script.py 的 Python 脚本。确保它可以在命令行中正确运行。 步骤2:找到Python可执行文件的位置 知道Python可…...
win10 查看 jks 的公钥
1.使用 keytool 导出jks文件的 crt 文件 先查询别名 keytool -list -keystore oauth2.jks -storepass [你的密钥库密码] 导出crt 文件 keytool -exportcert -alias oauth2 -keystore oauth2.jks -file 777.crt 2.查看公钥 打开PowerShell # 设置.crt文件的路径 $ce…...
蓝牙模块在智能体育设备中的创新应用
随着科技的飞速发展,智能体育设备已经成为现代体育训练和健身的重要组成部分。蓝牙模块作为智能体育设备中的核心技术之一,其创新应用不仅提升了设备的智能化水平,也为运动员和健身爱好者带来了前所未有的便利和体验。本文将探讨蓝牙模块在智…...
PPT|230页| 制造集团企业供应链端到端的数字化解决方案:从需求到结算的全链路业务闭环构建
制造业采购供应链管理是企业运营的核心环节,供应链协同管理在供应链上下游企业之间建立紧密的合作关系,通过信息共享、资源整合、业务协同等方式,实现供应链的全面管理和优化,提高供应链的效率和透明度,降低供应链的成…...
蓝桥杯 2024 15届国赛 A组 儿童节快乐
P10576 [蓝桥杯 2024 国 A] 儿童节快乐 题目描述 五彩斑斓的气球在蓝天下悠然飘荡,轻快的音乐在耳边持续回荡,小朋友们手牵着手一同畅快欢笑。在这样一片安乐祥和的氛围下,六一来了。 今天是六一儿童节,小蓝老师为了让大家在节…...
【android bluetooth 框架分析 04】【bt-framework 层详解 1】【BluetoothProperties介绍】
1. BluetoothProperties介绍 libsysprop/srcs/android/sysprop/BluetoothProperties.sysprop BluetoothProperties.sysprop 是 Android AOSP 中的一种 系统属性定义文件(System Property Definition File),用于声明和管理 Bluetooth 模块相…...
Spring数据访问模块设计
前面我们已经完成了IoC和web模块的设计,聪明的码友立马就知道了,该到数据访问模块了,要不就这俩玩个6啊,查库势在必行,至此,它来了。 一、核心设计理念 1、痛点在哪 应用离不开数据(数据库、No…...
佰力博科技与您探讨热释电测量的几种方法
热释电的测量主要涉及热释电系数的测定,这是表征热释电材料性能的重要参数。热释电系数的测量方法主要包括静态法、动态法和积分电荷法。其中,积分电荷法最为常用,其原理是通过测量在电容器上积累的热释电电荷,从而确定热释电系数…...
纯 Java 项目(非 SpringBoot)集成 Mybatis-Plus 和 Mybatis-Plus-Join
纯 Java 项目(非 SpringBoot)集成 Mybatis-Plus 和 Mybatis-Plus-Join 1、依赖1.1、依赖版本1.2、pom.xml 2、代码2.1、SqlSession 构造器2.2、MybatisPlus代码生成器2.3、获取 config.yml 配置2.3.1、config.yml2.3.2、项目配置类 2.4、ftl 模板2.4.1、…...
虚拟电厂发展三大趋势:市场化、技术主导、车网互联
市场化:从政策驱动到多元盈利 政策全面赋能 2025年4月,国家发改委、能源局发布《关于加快推进虚拟电厂发展的指导意见》,首次明确虚拟电厂为“独立市场主体”,提出硬性目标:2027年全国调节能力≥2000万千瓦࿰…...
uniapp手机号一键登录保姆级教程(包含前端和后端)
目录 前置条件创建uniapp项目并关联uniClound云空间开启一键登录模块并开通一键登录服务编写云函数并上传部署获取手机号流程(第一种) 前端直接调用云函数获取手机号(第三种)后台调用云函数获取手机号 错误码常见问题 前置条件 手机安装有sim卡手机开启…...
Scrapy-Redis分布式爬虫架构的可扩展性与容错性增强:基于微服务与容器化的解决方案
在大数据时代,海量数据的采集与处理成为企业和研究机构获取信息的关键环节。Scrapy-Redis作为一种经典的分布式爬虫架构,在处理大规模数据抓取任务时展现出强大的能力。然而,随着业务规模的不断扩大和数据抓取需求的日益复杂,传统…...
上位机开发过程中的设计模式体会(1):工厂方法模式、单例模式和生成器模式
简介 在我的 QT/C 开发工作中,合理运用设计模式极大地提高了代码的可维护性和可扩展性。本文将分享我在实际项目中应用的三种创造型模式:工厂方法模式、单例模式和生成器模式。 1. 工厂模式 (Factory Pattern) 应用场景 在我的 QT 项目中曾经有一个需…...
