【android开发-03】android中Intent的用法介绍
1,Intent的作用
在Android开发中,Intent的使用非常广泛,包括启动Activity、启动Service、发送广播等。是各组件间交互的一种重要方式,他不仅可以指明当前组件想要执行的动作,还可以在不同组件间传递数据。
Intent可以分为2种,显示Intent和隐式Intent。
2,Intent-filter用法说明
在Android中,intent-filter是一种用于过滤Intent的机制,它用于指定一个Activity、Service或BroadcastReceiver可以处理哪些类型的Intent。通过使用intent-filter,可以确保只有符合特定条件或具有特定数据的Intent才能到达目标组件。
intent-filter通常在AndroidManifest.xml文件中声明,用于指定目标组件的用途和可接受的数据类型。以下是一些常见的用法:
在Activity中过滤Intent:
在AndroidManifest.xml文件中,为每个Activity元素添加intent-filter子元素,以指定该Activity可以处理的Intent。例如:
<activity android:name=".MainActivity"> <intent-filter> <action android:name="android.intent.action.VIEW" /> <category android:name="android.intent.category.DEFAULT" /> </intent-filter>
</activity>
上述代码表示MainActivity可以处理一个具有默认Category的VIEW动作的Intent。
在Service中过滤Intent:
与Activity类似,Service也可以使用intent-filter来过滤Intent。例如:
<service android:name=".MyService"> <intent-filter> <action android:name="com.example.MY_SERVICE" /> </intent-filter>
</service>
上述代码表示MyService可以处理一个具有指定Action的Intent。
在BroadcastReceiver中过滤Intent:
BroadcastReceiver可以通过intent-filter来过滤广播Intent,以便在接收到特定广播时执行特定的操作。例如:
<receiver android:name=".MyBroadcastReceiver"> <intent-filter> <action android:name="android.intent.action.BOOT_COMPLETED" /> </intent-filter>
</receiver>
```上述代码表示MyBroadcastReceiver可以处理一个BOOT_COMPLETED动作的广播Intent。
总之,intent-filter是Android中用于过滤Intent的重要机制,它允许开发者指定目标组件可以处理的特定类型的Intent,以确保正确的数据能够传递给目标组件。
3,显示Intent用法和数据传递
以下是一个简单的例子,展示了如何使用Intent启动一个新的Activity。
假设我们有两个Activity:MainActivity和DetailActivity。在MainActivity中,用户可以点击一个按钮来查看DetailActivity,展示关于某个物品的详细信息。
在MainActivity中,我们可以创建一个Intent来启动DetailActivity。以下是一个示例代码:
public class MainActivity extends AppCompatActivity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); // 创建一个按钮,点击后启动DetailActivity Button button = findViewById(R.id.button); button.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { // 创建一个Intent,指定要启动的Activity为DetailActivity Intent intent = new Intent(MainActivity.this, DetailActivity.class); // 可以在Intent中传递数据给DetailActivity intent.putExtra("item_id", 123); // 启动DetailActivity startActivity(intent); } }); }
}
在DetailActivity中,我们可以从Intent中获取传递的数据,并根据数据展示关于物品的详细信息。以下是一个示例代码:
public class DetailActivity extends AppCompatActivity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_detail); // 从Intent中获取传递的数据 Intent intent = getIntent(); String itemId = intent.getStringExtra("item_id"); // 根据数据展示关于物品的详细信息 // ... }
}
Intent有多个重载函数,其中一个是Intent(Context packageContext,Class<?> cls),第一个参数要求提供一个启动活动的上下文,第二个参数class则是想要启动的目标活动。
使用这种方式来启动活动,Intent的意图非常明显,因此称为显示Intent。
Intent还向下一个活动传递数据,Intent提供了一系列的putExtra方法的重载,可以把我们想要的数据暂存在Intent中。putExtra方法接收2个参数,第一个参数是键,用于后面从Intent取值。第二个参数才是真正传递的数据。然后在下一个活动中通过getIntent方法获取到启动下一个活动的Intent,然后调用getStringExtra,传入相应的键值,就可以获取到数据。这里传递的是字符串,所以调用getStringExtra。如果是整形数据则使用getIntExtra,以此类推。
4,隐式Intent用法
隐式Intent是一种没有指定具体的目标组件的Intent,它需要借助ComponentName或Action、Category等信息来启动目标Activity。以下是使用隐式Intent的步骤:
4.1创建隐式Intent对象,并设置Action和Category等信息。例如:
Intent intent = new Intent(action);
其中,action 是一个字符串类型的动作名称,比如 “android.intent.action.VIEW”。如果需要添加 Category,则可以使用 Categories.add() 方法添加,例如:
intent.addCategory(category);
其中,category 是一个字符串类型的类别名称,比如 “android.intent.category.DEFAULT”。
4.2将隐式Intent传递给Context的startActivity()方法,以启动目标Activity。例如:
startActivity(intent);
4.3如果需要传递数据给目标Activity,则可以使用 putExtra() 方法将数据添加到Intent中。例如:
intent.putExtra(name, value);
其中,name 是一个字符串类型的键名,value 是对应的值。
4.4在目标Activity中,可以通过 getIntent() 方法获取隐式Intent,并从中获取传递的数据。例如:
Intent intent = getIntent();
String name = intent.getStringExtra(name);
其中,name 是传递数据的键名。
使用隐式Intent,不仅可以启动本程序内的活动,还有启动其他程序的活动,使应用程序间共享成为可能。
5,Intent返回数据给上一个活动
在 Android 中,使用 Intent 在活动之间传递数据是非常常见的操作。如果你希望在一个活动中获取另一个活动返回的数据,可以使用 startActivityForResult() 方法来启动目标活动,并在目标活动结束时返回数据给上一个活动。
下面是一个简单的示例,演示了如何在目标活动中获取数据并返回给上一个活动:
1,在上一个活动(例如 MainActivity)中启动目标活动(例如 TargetActivity):
public class MainActivity extends AppCompatActivity { public static final int REQUEST_CODE = 123; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); Button button = findViewById(R.id.button); button.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { Intent intent = new Intent(MainActivity.this, TargetActivity.class); startActivityForResult(intent, REQUEST_CODE); } }); }
}
2,在目标活动(例如 TargetActivity)中处理数据并返回给上一个活动:
public class TargetActivity extends AppCompatActivity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_target); // 处理数据... String data = "Hello from Target Activity!"; Intent intent = new Intent(); intent.putExtra("data", data); // 将数据添加到 Intent 中 setResult(RESULT_OK, intent); // 设置结果码和 Intent finish(); // 结束当前活动 }
}
3,在上一个活动中重写 onActivityResult() 方法来接收目标活动返回的数据:
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) { if (requestCode == REQUEST_CODE) { // 判断是否是目标活动的返回结果 if (resultCode == RESULT_OK) { // 判断是否成功返回结果 String returnedData = data.getStringExtra("data"); // 从 Intent 中获取返回的数据 // 处理返回的数据... } else { // 处理其他结果码的情况,例如 RESULT_CANCELED 或其他自定义结果码 // 处理取消或错误的情况... } } else { // 处理其他请求码的情况,例如其他活动的返回结果 // 处理其他请求码的情况... }
}
相关文章:
【android开发-03】android中Intent的用法介绍
1,Intent的作用 在Android开发中,Intent的使用非常广泛,包括启动Activity、启动Service、发送广播等。是各组件间交互的一种重要方式,他不仅可以指明当前组件想要执行的动作,还可以在不同组件间传递数据。 Intent可以…...
Java中时间工具详解:java.time包的应用
引言 时间在软件开发中是一个至关重要的概念,而Java自从引入java.time包后,提供了更加强大和灵活的时间处理工具。本文将深入介绍java.time包中的一些常用时间工具,帮助你更好地处理日期和时间的操作。 1. LocalDate - 处理日期 LocalDate…...
mysql 日志分析
程序启动标志 可以直接全局搜索,查看启动了几次 可以看到总共11次,当前是第2次 如何判断mysql是正常关闭,手动启动的 下图中启动之前出现 Shutdown complete打印说明启动之前是正常关闭的...
网络运维与网络安全 学习笔记2023.11.30
网络运维与网络安全 学习笔记 第三十一天 今日目标 实现AP自动注册、配置WLAN业务参数、无线终端通过wifi互访 实现AP自动注册 项目背景 企业内网的大量AP已经通过DHCP的方式获得IP地址 为了实现后期大量AP的统一管理,希望通过AC实现集中控制 在AC设备上&#…...
Perplexity 推出全新大型在线语言模型
每周跟踪AI热点新闻动向和震撼发展 想要探索生成式人工智能的前沿进展吗?订阅我们的简报,深入解析最新的技术突破、实际应用案例和未来的趋势。与全球数同行一同,从行业内部的深度分析和实用指南中受益。不要错过这个机会,成为AI领…...
python中的函数定义
默认参数 注: 在Python中,print(x, and y both correct)是一条打印语句(print statement),用于将一条消息输出到控制台或终端。它的作用是将变量x的值和字符串and y both correct同时输出到屏幕上。 在这个语句中&…...
信贷销售经理简历模板
这份简历内容,以信贷销售经理招聘需求为背景,我们制作了1份全面、专业且具有参考价值的简历案例,大家可以灵活借鉴。 信贷销售经理简历模板在线编辑下载:百度幻主简历 求职意向 求职类型:全职 意向岗位ÿ…...
js事件流与事件委托/事件代理
1 事件流 事件流分为两步,一是捕获,二是冒泡 1.1 捕获概念 捕获就是从最高层一层一层往下找到最内部的节点 1.2 冒泡概念 捕获到最小节点后,一层一层往上返回,像是气泡从最底部往上冒一样,由于水深不同压强不同&…...
代码随想录算法训练营第三十八天| 509 斐波那契数 70 爬楼梯 746 使用最小花费爬楼梯
509 斐波那契数 class Solution {public int fib(int n) {int f[] new int[n 5];f[0] 0;f[1] 1;for(int i 2;i < n;i){f[i] f[i - 1] f[i - 2];}return f[n];} } 时间复杂度O(n) 空间复杂度O(n) 70 爬楼梯 class Solution {public int climbStairs(i…...
windows 此系统禁止运行脚本报错处理
windows 此系统禁止运行脚本报错处理 start 在命令行中运行执行的脚本,运行原理可以参考文章 《》本文主要介绍,如何处理window默认的对脚本运行的限制。 详细说明 出现报错如下: 主要原因就是系统默认禁止了在 powershell 环境下某些脚…...
西南科技大学数字电子技术实验一(数字信号基本参数与逻辑门电路功能测试及FPGA 实现)FPGA部分
一、 实验目的 1、掌握基于 Verilog 语言的 diamond 工具设计全流程。 2、熟悉、应用 Verilog HDL 描述数字电路。 3、掌握 Verilog HDL 的组合和时序逻辑电路的设计方法。 4、掌握“小脚丫”开发板的使用方法。 二、 实验原理 与门逻辑表达式:Y=AB 原理仿真图: 2 输入…...
List系列集合
List系列集合特点:有序,可重复,有索引 ArrayList:有序,可重复,有索引 LinkedList:有序,可重复,有索引 (底层实现不同!适合的场景不同!…...
SQL 金额数值转换成中文大写
需求:将金额转换成中文大写格式填入单据合计行: _佰_拾_万_仟_佰_拾_元_角_分 1234567.89 壹佰贰拾叁万肆仟伍佰陆拾柒元捌角玖分 1.函数转换 drop function n2C;CREATE FUNCTION n2C (num numeric(14,2)) RETURNS VARCHAR(20) AS BEGIN …...
在Linux上安装KVM虚拟机
一、搭建KVM环境 KVM(Kernel-based Virtual Machine)是一个基于内核的系统虚拟化模块,从Linux内核版本2.6.20开始,各大Linux发行版就已经将其集成于发行版中。KVM与Xen等虚拟化相比,需要硬件支持的完全虚拟化。KVM由内…...
软件设计之原型模式
原型模式是从一个对象再创建另一个可定制的对象,而且不需要知道任何创建的细节。拷贝分浅拷贝和深拷贝。浅拷贝无法拷贝引用对象。在面试的时候,我们会投多家公司,根据岗位的不同我们会适当调整。使用原型模式可以快速达到需求,下…...
Android之高级UI
系统ViewGroup原理解析 常见的布局容器: FrameLayout, LinearLayout,RelativeLayoout,GridLayout 后起之秀:ConstraintLayout,CoordinateLayout Linearlayout Overrideprotected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {if (mOrientation …...
Qt:解决跨线程调用socket/IO类,导致报错的问题
Qt有很多IO相关的类,比如说QTcpSocket、QFile,总的来说,在Qt的框架内使用,还是非常方便的。 但是用过其他框架IO类的人,可能有一个很不习惯,就是Qt的所有IO类,都不推荐或者不可以跨线程操作&…...
长沙电信大楼火灾调查报告发布:系烟头引发。FIS来护航安全
近日,长沙电信大楼的火灾调查报告引起广泛关注。调查发现,火灾是由未熄灭的烟头引发,烟头点燃了室外平台的易燃物,迅速蔓延至整个建筑。这起悲剧再次提醒我们,小小的疏忽可能酿成大灾难。但如果我们能及时发现并处理这…...
【Web系列二十七】Vue实现dom元素拖拽并限制移动范围
目录 需求 拖拽功能封装 使用拖拽功能 vite-env.d.ts main.ts test.vue 需求 dom元素拖拽并限制在父组件范围内 拖拽功能封装 export const initVDrag (vue) > {vue.directive(drag, (el) > {const oDiv el // 当前元素oDiv.onmousedown (e) > {let target…...
【IEEE独立出版】2024第四届神经网络、信息与通信工程国际学术会议(NNICE 2024)
2024第四届神经网络、信息与通信工程国际学术会议(NNICE 2024) 2024 4th International Conference on Neural Networks, Information and Communication Engineering 2024第四神经网络、信息与通信工程国际学术会议(NNICE 2024࿰…...
Spring Boot 实现流式响应(兼容 2.7.x)
在实际开发中,我们可能会遇到一些流式数据处理的场景,比如接收来自上游接口的 Server-Sent Events(SSE) 或 流式 JSON 内容,并将其原样中转给前端页面或客户端。这种情况下,传统的 RestTemplate 缓存机制会…...
线程同步:确保多线程程序的安全与高效!
全文目录: 开篇语前序前言第一部分:线程同步的概念与问题1.1 线程同步的概念1.2 线程同步的问题1.3 线程同步的解决方案 第二部分:synchronized关键字的使用2.1 使用 synchronized修饰方法2.2 使用 synchronized修饰代码块 第三部分ÿ…...
对WWDC 2025 Keynote 内容的预测
借助我们以往对苹果公司发展路径的深入研究经验,以及大语言模型的分析能力,我们系统梳理了多年来苹果 WWDC 主题演讲的规律。在 WWDC 2025 即将揭幕之际,我们让 ChatGPT 对今年的 Keynote 内容进行了一个初步预测,聊作存档。等到明…...
GitHub 趋势日报 (2025年06月08日)
📊 由 TrendForge 系统生成 | 🌐 https://trendforge.devlive.org/ 🌐 本日报中的项目描述已自动翻译为中文 📈 今日获星趋势图 今日获星趋势图 884 cognee 566 dify 414 HumanSystemOptimization 414 omni-tools 321 note-gen …...
NLP学习路线图(二十三):长短期记忆网络(LSTM)
在自然语言处理(NLP)领域,我们时刻面临着处理序列数据的核心挑战。无论是理解句子的结构、分析文本的情感,还是实现语言的翻译,都需要模型能够捕捉词语之间依时序产生的复杂依赖关系。传统的神经网络结构在处理这种序列依赖时显得力不从心,而循环神经网络(RNN) 曾被视为…...
免费数学几何作图web平台
光锐软件免费数学工具,maths,数学制图,数学作图,几何作图,几何,AR开发,AR教育,增强现实,软件公司,XR,MR,VR,虚拟仿真,虚拟现实,混合现实,教育科技产品,职业模拟培训,高保真VR场景,结构互动课件,元宇宙http://xaglare.c…...
解决:Android studio 编译后报错\app\src\main\cpp\CMakeLists.txt‘ to exist
现象: android studio报错: [CXX1409] D:\GitLab\xxxxx\app.cxx\Debug\3f3w4y1i\arm64-v8a\android_gradle_build.json : expected buildFiles file ‘D:\GitLab\xxxxx\app\src\main\cpp\CMakeLists.txt’ to exist 解决: 不要动CMakeLists.…...
脑机新手指南(七):OpenBCI_GUI:从环境搭建到数据可视化(上)
一、OpenBCI_GUI 项目概述 (一)项目背景与目标 OpenBCI 是一个开源的脑电信号采集硬件平台,其配套的 OpenBCI_GUI 则是专为该硬件设计的图形化界面工具。对于研究人员、开发者和学生而言,首次接触 OpenBCI 设备时,往…...
Modbus RTU与Modbus TCP详解指南
目录 1. Modbus协议基础 1.1 什么是Modbus? 1.2 Modbus协议历史 1.3 Modbus协议族 1.4 Modbus通信模型 🎭 主从架构 🔄 请求响应模式 2. Modbus RTU详解 2.1 RTU是什么? 2.2 RTU物理层 🔌 连接方式 ⚡ 通信参数 2.3 RTU数据帧格式 📦 帧结构详解 🔍…...
Android屏幕刷新率与FPS(Frames Per Second) 120hz
Android屏幕刷新率与FPS(Frames Per Second) 120hz 屏幕刷新率是屏幕每秒钟刷新显示内容的次数,单位是赫兹(Hz)。 60Hz 屏幕:每秒刷新 60 次,每次刷新间隔约 16.67ms 90Hz 屏幕:每秒刷新 90 次,…...
