安卓逆向之Android-Intent介绍
Intent是各个组件之间交互的一种重要方式,它不仅可以指明当前组件想要执行的动作,而且还能在各组件之间传递数据。Intent一般可用于启动Activity、启动Service、发送广播等场景。Intent有多个构造函数的重载。
显式intent
显式 Intent 明确指定要启动的目标组件的类名。通过显式 Intent,开发者可以直接调用应用程序内的特定 Activity 或服务。主要用于应用程序内部组件之间的调用。比如在一个 Activity 中启动另一个 Activity。
Intent intent = new Intent(MainActivity.class,SecondActivity.class);
intent.putExtra("et1",et1Str);
startActivity(intent);
Intent intent = new Intent(...)
:这行代码创建了一个新的 Intent 对象。Intent 是 Android 中用于不同组件(如 Activity、服务等)之间进行通信的基础类。new Intent(MainActivity.class, SecondActivity.class)
:这个构造函数的两个参数分别是起始 Activity和目标 Activity。在这个例子中,从MainActivity
目标是SecondActivity
。这意味着当 Intent 被启动时,应用程序会在SecondActivity
中打开界面。intent.putExtra("et1", et1Str)
:这行代码用于将额外的数据放入 Intent 中。在这里,"et1"
是键(key),而et1Str
是与之关联的值。这种方式允许我们在启动的SecondActivity
中接收et1Str
的值,便于在新的界面上使用或显示该数据。startActivity(intent)
:这行代码调用startActivity
方法,使用先前创建的 Intent 启动SecondActivity
。执行这一行后,应用程序将离开MainActivity
,并加载SecondActivity
的界面。
隐式intent
隐式 Intent 不直接指定目标组件,而是通过指定一个动作(Action)和/或数据(Data)来指示系统执行某种操作。系统会根据 Intent 的信息查找可以处理该 Intent 的合适组件。
隐式 Intent 允许多个应用程序响应同一个 Intent。只要有一个组件注册了与 Intent 的动作、类别和数据匹配的 intent-filter,就可以接收到这个 Intent。
java部分
Intent intent = new Intent(Intent.ACTION_VIEW);
intent.setData(Uri.parse("https://www.baidu.com"));
startActivity(intent);
Intent intent = new Intent(Intent.ACTION_VIEW);
:这行代码创建了一个新的 Intent 对象,指定了动作为ACTION_VIEW
intent.setData(Uri.parse("https://www.baidu.com"));
:这行代码将 Intent 的数据设置为一个 URI(统一资源标识符),在这个例子中是百度的网页地址"https://www.baidu.com"
。使用Uri.parse()
方法将字符串转换为 URI 格式,这允许系统知道需要打开什么资源。startActivity(intent);
:这行代码使用先前创建的 Intent 启动一个新的 Activity。在这里,它通常会打开一个浏览器或系统的 Web 视图,展示所指定的 URL。
AndroidManifest.xml部分
<activity android:name=".SecondActivity"><intent-filter><action android:name="com.example.test.action.VIEW" /> <category android:name="android.intent.category.DEFAULT" /><data android:scheme="http"></intent-filter></activity>
<activity android:name=".SecondActivity">
:这行代码在 AndroidManifest.xml 文件中声明了一个 Activity,名为SecondActivity
。<intent-filter>
:这个标签用于定义这个 Activity 能够响应的 intent<action android:name="com.example.test.action.VIEW" />
:这行代码定义了一个自定义的动作,com.example.test.action.VIEW
,意味着这个 Activity 可以处理带有这个动作的 Intent。<category android:name="android.intent.category.DEFAULT" />
:这行代码将意图分类为默认类别,表示这个 Activity 可以处理一些常见的意图。<data android:scheme="http" />
:这行代码指定了这个 Activity 处理的数据类型,主要是以http
开头的 URI。在这里,它明确表示这个 Activity 可以接收以http
或https
开头的网址。
对比
特点 | 显式 Intent | 隐式 Intent |
目标指定法 | 直接指定目标组件(类名) | 不指定目标组件,通过 Action、Data 让系统解析 |
适用场景 | 应用内组件间的通信 | 向系统或其他应用发送请求 |
安全性 | 相对更安全,明确调用 | 相对不安全,需要意图过滤器匹配 |
注册需求 | 无需在 Manifest 中注册 | 需要在 Manifest 中使用 intent-filter 注册 |
使用示例 |
|
|
intent接收字符串
Intent intent = getIntent();
String data = intent.getStringExtra("et1");
接收名为et1的参数值
第二个组件返回数据
有两种方式一种式通过startActivityForResult,一种是通过back键
第一种 不按back键
// 在第一个 Activity 中
Intent intent = new Intent(this, SecondActivity.class);
startActivityForResult(intent, 1); // 1为请求码,用于标识该请求
使用 startActivityForResult()
方法启动第二个组件(Activity)。这允许第一个组件在第二个组件结束时接收结果。
// 在第二个 Activity 中
EditText editText = findViewById(R.id.editText);
String resultData = editText.getText().toString(); // 处理用户点击的按钮
Button button = findViewById(R.id.button);
button.setOnClickListener(v -> { Intent resultIntent = new Intent(); resultIntent.putExtra("returnData", resultData); // 返回数据 setResult(RESULT_OK, resultIntent); // 设置结果为 OK,并传递数据 finish(); // 结束该 Activity
});
在第二个组件(Activity)中,获取用户输入的数据,并在用户完成操作后使用 setResult()
方法将数据返回给第一个组件,然后调用 finish()
结束该 Activity。
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) { super.onActivityResult(requestCode, resultCode, data); if (requestCode == 1) { // 检查请求码 if (resultCode == RESULT_OK) { // 检查结果是否 OK String returnData = data.getStringExtra("returnData"); // 处理返回的数据 Toast.makeText(this, "Received: " + returnData, Toast.LENGTH_SHORT).show(); } }
}
在第一个组件中,重写 onActivityResult()
方法,以接收来自第二个组件的结果。可以通过请求码来识别该结果是来自哪个 Activity。
第二种 按back键
如果用户通过点击 Back 键返回到第一个 Activity,在正常情况下,Back 键会关闭第二个 Activity,而不会返回任何结果。在这种情况下,onActivityResult()
方法将不会被调用,因为没有通过 setResult()
返回结果。如果你希望在用户按 Back 键时处理结果,可以在第二个 Activity 中重写 onBackPressed()
方法,并使用 setResult()
返回数据。
@Override
public void onBackPressed() { Intent resultIntent = new Intent(); resultIntent.putExtra("returnData", "User cancelled"); // 设置返回数据 setResult(RESULT_CANCELED, resultIntent); // 设置结果为 CANCELLED super.onBackPressed(); // 调用父类方法,结束该 Activity
}
那么第一个组件种也要重写onActivityResult来接收传递的值
@Override protected void onActivityResult(int requestCode, int resultCode, Intent data) { super.onActivityResult(requestCode, resultCode, data); if (requestCode == 1) { // 检查请求码 if (resultCode == RESULT_OK) { // 检查结果是否 OK String returnData = data.getStringExtra("returnData"); // 处理返回的数据 Toast.makeText(this, "Received: " + returnData, Toast.LENGTH_SHORT).show(); } } }
仔细观察会发现他们第二个组件都是差不多的,都有以下相同的代码逻辑
Intent resultIntent = new Intent();
resultIntent.putExtra("returnData", "User cancelled"); // 设置返回数据
setResult(RESULT_CANCELED, resultIntent); // 设置结果为 CANCELLED
super.onBackPressed(); // 调用父类方法,结束该 Activity
但是如果通过按back键来返回的话就多了一个 重写onBackPressed的过程,他是针对用户需要进行back键来返回的逻辑处理,通俗来讲也就是针对用户按下back键这一操作的逻辑处理。
不同场景 使用不同的方式 例如:
- 如果用户必须完成某项操作后才能返回数据,那么使用 不按back的方式 是更合适的选择。
- 如果你希望记录用户退出的状态,或者允许用户在不完成输入的情况下返回数据,重写
onBackPressed()
来返回一些适合的默认值是一个很好的选择。
相关文章:
安卓逆向之Android-Intent介绍
Intent是各个组件之间交互的一种重要方式,它不仅可以指明当前组件想要执行的动作,而且还能在各组件之间传递数据。Intent一般可用于启动Activity、启动Service、发送广播等场景。Intent有多个构造函数的重载。 显式intent 显式 Intent 明确指定要启动的…...
数据库日期时间用什么类型?
数据库中的日期时间类型主要包括DATE、TIME、DATETIME和TIMESTAMP等,它们在存储、格式和范围等方面有所不同。以下是这些类型的详细说明和异同比较: 1. DATE类型 用途:用于存储日期值,不包含时间部分。格式:YYYY-MM-…...
Python中字符串和正则表达式
Python中字符串和正则表达式 在Python编程中,字符串是最常用的数据类型之一。字符串用于表示文本数据,而正则表达式则是一种强大的工具,用于处理和匹配字符串中的模式。本文将介绍Python中的字符串操作、字符串格式化以及如何使用正则表达式…...
Leecode刷题C语言之N皇后
执行结果:通过 执行用时和内存消耗如下: 代码如下: int solutionsSize;char** generateBoard(int* queens, int n) {char** board (char**)malloc(sizeof(char*) * n);for (int i 0; i < n; i) {board[i] (char*)malloc(sizeof(char) * (n 1))…...
即时通讯| IM+RTC在AI技术加持下的社交体验
即时通讯作为互联网的重要应用之一,见证了中国互联网30年发展的辉煌历程。 它从最初的文字交流,发展到如今的语音、视频通话,甚至是虚拟现实社交,已经渗透到生活的社交、娱乐、商务等方方面面,成为现代社会不可或缺的一…...
repo仓库转移到自己本地的git服务器
前提条件:搭建好gitolite 以转移正点原子rk3568_linux工程为例子,将其转移到自己的git服务器。 获取完整repo仓库 将正点原子epo仓库sync出来 evanevan-X99:~/SRC/atk$ .repo/repo/repo sync -l -j10 evanevan-X99:~/SRC/atk$ .repo/repo/repo list -n…...
微服务即时通讯系统的实现(服务端)----(2)
目录 1. 语音识别子服务的实现1.1 功能设计1.2 模块划分1.3 模块功能示意图1.4 接口的实现 2. 文件存储子服务的实现2.1 功能设计2.2 模块划分2.3 模块功能示意图2.4 接口的实现 3. 用户管理子服务的实现3.1 功能设计3.2 模块划分3.3 功能模块示意图3.4 数据管理3.4.1 关系数据…...
人工智能-深度学习-神经网络-激活函数
激活函数通过引入非线性来增强神经网络的表达能力,对于解决线性模型的局限性至关重要。由于反向传播算法(BP)用于更新网络参数,因此激活函数必须是可微的,也就是说能够求导的。 满足激活函数的条件 1.可微分,也就是可求导 激活函…...
vue3+ts+uniapp微信小程序顶部导航栏
这是colorui改的,不用就不用看啦 color-ui(https://docs.xzeu.com/#/) 新建component文件夹创建topNavigation.vue <template><view><view class"cu-custom" :style"height: CustomBar px"><view class"cu-bar…...
IAR中编译下载未下载问题
第一张图片是正常下载,第二张未正常下载。经过查看download选项发现 启用了 suppress download (禁用下载)...
springboot(20)(删除文章分类。获取、更新、删除文章详细)(Validation分组校验)
目录 一、删除文章分类功能。 (1)接口文档。 1、请求路径、请求参数。 2、请求参数。 3、响应数据。 (2)实现思路与代码书写。 1、controller层。 2、service接口业务层。 3、serviceImpl实现类。 4、mapper层。 5、后端接口测试。…...
英语系统语法书面记载:高级语法 8 的状语从句
在英语高级语法中,状语从句是一种用来修饰动词、形容词、副词或整个句子的从句,它提供有关时间、地点、原因、条件、方式、让步等信息。状语从句通常由特定的连词引导。以下是常见的几种状语从句类型及其用法: 1. 时间状语从句 (Adverbial Cl…...
C语言:深入理解指针(1)
一.内存和地址 在讲内存和地址之前,我们想有个生活中的案例: 假设有一栋宿舍楼,把你放在楼里,楼上有100个房间,但是房间没有编号,你的一个朋友来找你玩,如果想找到你,就得挨个房子去…...
priority_queue--优先队列
一、认识优先队列 priority_queue(优先队列)是 C 标准模板库(STL)中的一个容器适配器。它的底层实现通常是用堆(一般是二叉堆)来实现的。优先队列中的元素按照一定的优先级顺序进行排列,在队首的…...
Paper -- 建筑物高度估计 -- 基于深度学习、图像处理和自动地理空间分析的街景图像建筑高度估算
论文题目: Building height estimation from street-view imagery using deep learning, image processing and automated geospatial analysis 中文题目: 基于深度学习、图像处理和自动地理空间分析的街景图像建筑高度估算 作者: Ala’a Al-Habashna, Ryan Murdoch 作者单位: …...
开发一套ERP 第八弹 RUst 插入数据
更全面的报错,方便检查错误在哪里,现代高级语言越来越智能 还是得看下原文档怎么操作的 src 目录为crate 的根目录 想在crate 中模块相互引入需要在 main 中声明,各个模块,然后才能在各个模块中相互引入和使用 原始工程引入,避免直接使用 lib.rs 回合cargo 中的一些 工程管理出…...
回退用 git revert 还是 git reset?
git revert 会生成一个新的 commit 来记录此次操作;git reset 是把 HEAD 指针向前挪动一次,会减少一个 commit。 回退用 git revert 回退还是用 git reset,核心就一点: 是否需要记录这次回退。 如果需要记录这次回退,…...
【docker】多阶段构建与基础构建,及企业案例展示
基础构建与多阶段构建对比 基础构建(单阶段构建) 在基础构建中,所有构建过程和最终的应用程序都在同一个镜像中进行,构建工具和最终应用程序都会在最终镜像中。 这样构建镜像时会包含所有的构建工具和依赖,因此最终镜…...
基于链表的基础笔试/面试题
1. 反转链表 问题描述:反转一个单向链表。 示例: 输入:1 → 2 → 3 → 4 → 5 输出:5 → 4 → 3 → 2 → 1 class ListNode {int val;ListNode next;ListNode(int x) {val x;} }public class LinkedList {public ListNode …...
SARIMA 模型Matlab代码
% 导入数据 data readtable(data.xlsx); % 假设数据在第一列 y data{:, 1}; % 获取第一列数据% 划分训练集和测试集,80% 训练,20% 测试 trainSize floor(0.8 * length(y)); trainData y(1:trainSize); testData y(trainSize1:end);% 创建时间序列…...
第八课 Unity编辑器创建的资源优化_特效篇(Particle System)详解
无论是CPU还是GPU,粒子系统对其的影响面都是不容小觑的。随着项目的重度化和3A化,玩家的口味变挑剔了、游戏玩法复杂度变高了、画面的特效表现变复杂了......所以我们还是更加谨慎地对待粒子系统。 特效(Particle System) 游戏效…...
Oracle对比表与表之间的结构
自己首先想到的就是,navicat有提供结构同步 但是有些时候情况不一样,比如我遇到的是连接不同,而且是互相同步,以最多的列的那个表为样 没有说一个固定的源 那么还可以通过导出表结构去另一个库中执行看是否报错,以此来判断结构的不同 但是我感觉有点儿麻烦 最后想到通过sql语…...
基于JSP+MySQL的网上招聘系统的设计与实现
摘要 在这样一个经济飞速发展的时代,人们的生存与生活问题已成为当代社会需要关注的一个焦点。对于一个刚刚 踏入社会的年轻人来说,他对就业市场和形势了解的不够详细,同时对自己的职业规划也很模糊,这就导致大量的 时间被花费在…...
【Linux】进程地址空间(虚拟地址vs物理地址vs页表)
Linux 进程概念补充【Linux】 进程是什么(不熟悉的兄弟可以看看)。 1. C/C内存分布图 对于有c/c基础的同学相信对上面的图片并不陌生,实际上其描述的并不是正真的物理内存,而是虚拟内存,我们把它叫做进程地址空间 。 2…...
pytorch 融合 fuse 学习笔记
目录 fuse_lora 作用是什么 fuse_modules源码解读 fuse_lora 作用是什么 在深度学习模型微调场景下(与 LoRA 相关) 参数融合功能 在使用 LoRA(Low - Rank Adaptation)对预训练模型进行微调后,fuse_lora函数的主要作…...
在 Ubuntu 20.04 上使用 Lux 下载 Bilibili 视频的详细教程
在 Ubuntu 20.04 上使用 Lux 下载 Bilibili 视频的详细教程 在 Ubuntu 20.04 上使用 Lux 下载 Bilibili(哔哩哔哩)视频的完整和详细步骤如下,包括使用预编译二进制文件的安装方法: 1. 安装依赖 确保你的系统已安装 FFmpeg&…...
【eclipse】快捷键
【eclipse】快捷键 编辑导航重构调试复制其他快速生成 Eclipse 提供了丰富的快捷键来帮助开发者提高工作效率。 以下是一些常用的 Eclipse 快捷键,它们覆盖了编辑、导航、重构、调试等多个方面。 这些快捷键能够显著提升开发效率,尤其是在处理大型项目时…...
集成开发环境(IDE)的使用技巧插件配置
在开发过程中,集成开发环境(IDE)的使用技巧和插件配置对提高工作效率、优化代码质量和加速调试至关重要。 一、IDE使用技巧 1. 代码导航 跳转到定义(Go to Definition):快速跳转到函数、类或变量的定义位…...
【如何提升代码工程质量】code review篇
应该对于基本上所有软件相关的公司来说,都有committer机制,即代码写好之后会提交合并请求,待相关人员code review通过后再进行合入,所以code review就是代码合入代码仓库的最后一道关卡,对于代码质量的影响也是不容忽视…...
Qt 面试题学习13_2024-12-1
Qt 面试题 1、 QString与基本数据类型如何转换?2、常用数据结构3、进程之间的道信方式有哪些? 1、 QString与基本数据类型如何转换? 1、将QString转换为基本数据类型通过QString的各种转换函数,可以将QString转换为int、float、double等基本数据类型。 QStri…...
湖南鸿源电力建设有限公司网站/头条搜索是百度引擎吗
【实验】【VNC】Linux环境VNC服务安装、配置与使用 1.确认VNC是否安装默认情况下,Red Hat Enterprise Linux安装程序会将VNC服务安装在系统上。确认是否已经安装VNC服务及查看安装的VNC版本[roottestdb ~]# rpm -q vnc-servervnc-server-4.1.2-9.el5[roottestdb ~]#…...
网站 设计 方案/营销渠道模式有哪些
前言本章主要介绍数据库中 groupby的用法,也是我们在使用数据库时非常基础的一个知识点。并且也会涉及Join的使用,关于Join的用法,可以看我写的上一篇文章:带你了解数据库中JOIN的用法 如有错误还请大家及时指出~以下都是采用mysq…...
asp.net做网站源代码/站长统计app官方网站
来源:fhods Blog作者:fhod 小财说明:文章已发表于***手册07年10期,转载请注明出处!对明小子QQ密码特工软件的分析 ----小财今天无聊给一朋友讲解QQ盗取原理,从网上找了一个工具 “明小子QQ密码特工”结果发…...
vi设计logo/seo深度解析
点击关注公众号,Java干货及时送达来源:cnblogs.com/jokingremarks/p/15158395.html从入职开始到现在已经一个月零一周了,回想一下自己在这儿的情况,可以说是和自己的想法中的软件工程师完全不一样了,起码和几个熟悉的同…...
做网站找个人还是找公司/品牌营销与推广
本节书摘来异步社区《淘宝店铺设计装修一册通》一书中的第2章,作者: 葛存山 责编: 赵轩, 更多章节内容可以访问云栖社区“异步社区”公众号查看。 2.4 创建文字 淘宝店铺设计装修一册通Photoshop提供了丰富的文字工具,可以在图像…...
佛山市建设小学网站/网络营销优化培训
IIS最近有个别客户反映购买的在线人数(IIS连接数)和实际不符合,现在特说明如下首先了解什么是IIS连接数。IIS连接数指并发连接数,什么意思呢?要分几种情况:(以100M空间50人在线为例)A 用户单点下载你的文件,结束后正常…...