当前位置: 首页 > news >正文

在Android开发中实现两个Intent跳转及数据交换的方法

在Android开发中,两个活动(Activity)之间的Intent跳转及数据交换是一项基本而重要的功能。这通常涉及两个步骤:从一个活动发送数据,并在另一个活动中接收数据。

一、发起活动 — 发送数据

首先是初始化一个Intent对象,并使用 putExtra()方法来传递数据。以下是具体的步骤:

  1. 创建一个新的Intent对象,指定当前上下文(Context)和目标活动(Activity)。
  2. 使用 putExtra()方法附加要传送的数据。可传递的数据类型包括基本数据类型、字符串、序列化对象等。
  3. 调用 startActivity()startActivityForResult()方法发起跳转。
Intent intent = new Intent(CurrentActivity.this, TargetActivity.class);
intent.putExtra("key", value); // “key”是数据的标签,value是实际的数据。
startActivity(intent); // 或者 startActivityForResult(intent, REQUEST_CODE); 用于请求结果。

二、目标活动 — 接收数据

在目标活动中,可以通过目标活动的 getIntent()方法获取发起活动传递过来的Intent,然后使用 getExtras()或相应的 get方法获取数据。

Intent intent = getIntent();
if (intent != null) {String data = intent.getStringExtra("key"); // 使用与发送时相同的键来检索数据。// 根据数据类型,可能使用getIntExtra, getSerializableExtra等不同方法。
}

三、处理活动结果

如果使用 startActivityForResult()方法启动目标活动,当目标活动结束后,可以在发起活动中通过复写 onActivityResult()方法来处理返回的结果。

目标活动设置结果:

Intent returnIntent = new Intent();
returnIntent.putExtra("resultKey", result);
setResult(Activity.RESULT_OK, returnIntent);
finish(); // 结束目标活动,返回发起活动。

发起活动接收结果:

@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {super.onActivityResult(requestCode, resultCode, data);if (requestCode == REQUEST_CODE) { // 检查请求代码。if (resultCode == Activity.RESULT_OK && data != null) {String result = data.getStringExtra("resultKey");// 处理返回的结果。}}
}

四、数据类型和传输限制

在使用Intent传输数据时,传输的数据大小存在限制。大量数据的传输(如大图片等)应考虑其他方法,如通过全局变量、单例模式、数据库、文件等形式进行传递。

对于基本数据类型、字符串和序列化对象,它们可以直接通过Intent传输。对于其他非标准数据类型,则需要实现 Parcelable接口来让对象可以被Intent传递。

五、安全考虑

在设计Intent跳转及数据交换时,还应注意安全性问题。确保不会因为接收到的Intent而意外泄露隐私信息或让应用受到攻击。比如,通过Intent传递敏感信息时,应加以适当的保护,或采用更安全的传递方式。

此外,可以设置Intent过滤器来限定那些活动可以响应Intent,以及在Manifest文件中对活动定义导出属性,进一步提高应用的安全性。

http://www.rkmt.cn/news/5976.html

相关文章:

  • ARC188 做题记
  • AT_arc145_d [ARC145D] Non Arithmetic Progression Set
  • C# 多线程编程核心要点:不只是Thread和lock
  • 研究生学术英语读写教程(中国科学院大学出版) Unit10 TextA 原文以及翻译(仅供学习)
  • go使用反射获取http.Request参数到结构体 - 实践
  • centos7中mysql环境配置
  • Symfony学习笔记 - 利用Doctrine开发一个学生信息的增删查改
  • 实时内核中的调度程序节流
  • 我的ai 相关工具站
  • C#第十一章 023 024
  • centos7中scrapy运行环境配置
  • flutter配置国内镜像
  • 微信小程序 live-player 无声音
  • 陈燕的项目启动笔记
  • hyperv 管理的 ubuntu 虚拟机压缩磁盘
  • 【实战记录】使用 wp-cli 恢复/修改 WordPress 密码
  • Spring Boot 下 Druid 连接池:多维度优化打造卓越性能
  • vue3使用vue3-pdf-app预览pdf文档
  • 使用lvgl/lv_port_pc_visual_studio在PC上运行LVGL模拟器
  • Hutool 调用第三方接口报错
  • 丑东西经济学:全面分析
  • Python turtle 海龟画图入门指南
  • 啥是CPU
  • C# Avalonia 15- Animation- CodeAnimation
  • ubuntu 18.04安装mysql 8.0.41
  • C++ std::unordered_set
  • 如何将一个项目同时提交到GitHub和Gitee(码云)上
  • 易基因:Nat Genet/IF29:董朝斌团队ChIP-seq等揭示作物株型穗型发育调控新机制 助力表观遗传育种驯化改良(顶刊佳作)
  • Python TensorFlow的CNN-LSTM-GRU集成模型在边缘物联网数据IoT电动汽车充电站入侵检测应用
  • 源码管理—密钥硬编码问题