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

记录:移动设备软件开发(Activity的显式启动和隐式启动)

目录

  • Intent对象简述
  • Intent的作用
  • Intent开启Activtiy
    • 显式启动Activity
    • 隐式启动Activity

Intent对象简述

Android的应用程序包含三种重要组件:Activity、Service、BroadcastReceiver,应用程序采用了一致的方式来启动它们——都是依靠Intent来启动的,Intent就封装了程序想要启动的程序的意图。不仅如此Intent还可用于与被启动组件交换信息。
下图显示了使用Intent启动不同组件的方法

Intent的作用

Intent是一个可以消息传递对象,可以通过它来进行组件之间的信息传递。Intent主要有以下三个作用:

1开启一个activity

2 开启一个service

3 发送广播消息

Intent开启Activtiy

在操作activity的显式启动和隐式启动之前,我们还是需要先了解一下什么是activity的显示启动和隐式启动
显式启动:指明要启动的Activity所在的类,指的是它已经明确指定了将要启动的组件,故称作显式启动
隐式启动:系统根据Intent的动作和数据来决定启动那个Activity,指的是没有指定Component属性,没有明确指定要启动哪个组件,引用将会根据Intent指定的规则去启动符合条件的组件,但具体是哪个组件不确定
优点:只要知道被启动Activity的Action和Category即可,不用知道对应的类名或者是包名。
只要Activity有对应的action和Category都会被启动起来。然后提供给用户选择要启动哪一个。
需要被启动的Activity,需要在自己的AndroidManifest.xml定义对应的action 和 category。

显式启动Activity

显式启动Activity比较简单,先创建一个Intent,指定应用程序上下文和需要启动的Activity,然后调用startActivity来启动新的Activity

<!--AndroidManifest.xml-->
<activity android:name=".SecondActivity"></activity>
//启动Activity
Intent it = new Intent(this, SecondActivity.class);
startActivity(it);

通过类名类启动Activity, 一般是同一个APK里面使用

   private void startSecondActivityByClass() {XLog.i(TAG, "startSecondActivityByClass()");Intent intent = new Intent(FirstActivity.this, SecondActivity.class);try {startActivity(intent);} catch (Exception e) {XLog.i(TAG, "start activity error!");}}

通过包名加类名启动

           不足:被启动的应用的包名或者类名发生变化后,就会无法启动。private void startSecondActivityByPackageName() {XLog.i(TAG, "startSecondActivityByPackage()");Intent intent = new Intent();intent.setClassName(getPackageName(), getPackageName() + ".SecondActivity");try {startActivity(intent);} catch (Exception e) {XLog.i(TAG, "start activity error!");}}

通过ComponentName启动
不足:被启动的应用的包名或者类名发生变化后,就会无法启动。

  private void startSecondActivityByComponent() {XLog.i(TAG, "startSecondActivityByComponent()");Intent intent = new Intent();intent.setComponent(new ComponentName(getPackageName(), getPackageName() + ".SecondActivity"));try {startActivity(intent);} catch (Exception e) {XLog.i(TAG, "start activity error!");}}

隐式启动Activity

打开AndroidManifest.xml查看里面的代码,在学习隐式启动Activity前需要了解里的参数。

Activity的别名,可以修改自己Activity的名称
android.intent.action.MAIN决定应用程序最先启动的Activity

给Activity进行分组,可以自己添加一个组别
一种默认的category,在调用startActivity()方法的时候会自动将这个category添加到Intent中
如果自己定义的某个Activity要通过隐式启动,在AndroidManifast.xml必须加上android.intent.category.DEFAULT,否则不起作用

android.intent.category.LAUNCHER决定应用程序是否显示在程序列表里
(想要App隐藏图标,去掉LAUNCHER,或者使用DEFAULT即可)
在这里插入图片描述

如果一个应用多个Activity都设置了这个参数,则程序列表里会显示多个该应用Activity的图标

1.通过Activity的别名隐式启动

<activity android:name=".SecondActivity"><intent-filter><!--取别名--><action android:name="com.example.test.ACTION_START"/><category android:name="android.intent.category.DEFAULT"/></intent-filter>
</activity>
//隐式启动系统Activity
//参数1:字符串(某Activity的别名)
Intent it = new Intent("com.example.test.ACTION_START");  
startActivity(it);

2.通过别名和自定义的种类隐式启动

<activity android:name=".SecondActivity"><intent-filter>        <action android:name="com.example.test.ACTION_START"/><category android:name="android.intent.category.DEFAULT"/><category android:name="com.example.test.MY_CATEGORY"/></intent-filter>
</activity>
Intent it = new Intent("com.example.test.ACTION_START");  
//添加自定义的种类
intent.addCategory("com.example.test.MY_CATEGORY");
startActivity(it);

3.根据用户的数据类型打开相应的Activity
Intent.ACTION_VIEW是Android系统内置的一个动作,通过URi.parse()方法解析后,再调用Intent.setData()方法讲这个Un对象传递进去

Intent it = new Intent("Intent.ACTION_VIEW");  
it.setData(Uri.parse("https://www.baidu.com"));
startActivity(it);//参数1:字符串(某Activity的别名)
//参数2:打开的路径,通过协议来具体的确定打开什么Activity
Intent it2 = new Intent("Intent.ACTION_VIEW", Uri.parse("https://www.baidu.com")); 
startActivity(it2);Intent it3 = new Intent("Intent.ACTION_DIAL", Uri.parse("tel:18812341234")); 
startActivity(it3);

4.响应用户指定的数据类型

<activity android:name=".SecondActivity"><intent-filter tools:ignore="AppLinkUrlError">        <action android:name="com.example.test.ACTION_START"/><category android:name="android.intent.category.DEFAULT"/><data android:scheme="https"></intent-filter>
</activity>

这样就可以通过Android:scheme指定了数据的协议必须的httos协议,这样此Activity就能和浏览器网页 一样,响应一个打开网页的Intent了。

相关文章:

记录:移动设备软件开发(Activity的显式启动和隐式启动)

目录 Intent对象简述Intent的作用Intent开启Activtiy显式启动Activity隐式启动Activity Intent对象简述 Android的应用程序包含三种重要组件&#xff1a;Activity、Service、BroadcastReceiver&#xff0c;应用程序采用了一致的方式来启动它们——都是依靠Intent来启动的&…...

面试题库(十一):MQ和分布式事务

MQ mq 通知时,消费者没消费到怎么办简单聊聊消息中间件?你了解那些具体的消息中间件产品?mq的消费端是怎么处理的? 整理一下你的消费端的整个处理逻辑流程,然后说说你的ack是在哪里返回的。按照你这样画的话,如果数据库突然宕机,你的消息该怎么确认已经接收? 那如果发送…...

Linux日期和时间管理指南:日期、时间、时区、定时任务和时间同步

文章目录 Linux日期和时间管理指南1. 简介1.1 Linux 日期和时间的重要性1.2 日期管理的需求 2. 查看当前日期和时间2.1 date 命令2.2 cal 命令2.3 查看硬件时钟 3. 设置系统日期和时间3.1 设置日期3.2 设置时间3.3 设置硬件时钟 4. 时区管理4.1 查看当前时区4.2 修改系统时区4.…...

tsar-性能监控工具

简介 tsar是淘宝自己开发的一个采集工具&#xff0c;主要用来收集服务器的系统信息&#xff08;如cpu&#xff0c;io&#xff0c;mem&#xff0c;tcp等&#xff09;&#xff0c;以及应用数据&#xff08;如squid haproxy nginx等&#xff09;。收集到的数据存储在磁盘上&#…...

【Linux】系统编程简单线程池(C++)

目录 【1】线程池概念 【1.1】线程池 【1.2】线程池的应用场景 【1.3】线程池的种类 【1.4】线程池示例 【2】线程池代码 【1】线程池概念 【1.1】线程池 一种线程使用模式。线程过多会带来调度开销&#xff0c;进而影响缓存局部性和整体性能。而线程池维护着多个线程&a…...

数据结构之道:如何选择适合你的数据存储

文章目录 第1节&#xff1a;数据结构的基本原理1.1 时间复杂度和空间复杂度1.2 数据的访问方式1.3 数据的增删操作 第2节&#xff1a;常见的数据结构2.1 数组&#xff08;Array&#xff09;2.2 链表&#xff08;Linked List&#xff09;2.3 栈&#xff08;Stack&#xff09;2.4…...

MySQL定时删除XX天数据

写在前面 定时删除数据方式有多种方法&#xff0c;在实际工作中很多人可能会通过编码实现&#xff0c;也有人可能会通过脚本定时执行SQL进行定时删除对应数据。 今天使用MySQL自带的删除策略。 MYSQL删除策略 从MySQL5.1.6起&#xff0c;增加了一个非常有特色的功能–事件调…...

vue在js文件中调用$notify

我们在vue组件中可以直接 this.$notify({title: 修改成功,type: success,duration: 2500 })但在js中 我们this的指向就会发生一些不同 但是 其实 学过构造函数和原型链的人会很好理解这一点 每一个vue组件都是通过 vue构造出来的一个实例 所以 他们的this都是指向当前实例对象…...

C++从入门到精通

目录 C 语言特性C 学习大纲初级阶段1. 基础概念2. 数据类型和变量3. 运算符和表达式4. 控制流程 中级阶段5. 函数和模块化编程6. 数据结构7. 面向对象编程&#xff08;OOP&#xff09; 高级阶段8. 文件操作和流9. 模板和泛型编程10. 多线程和并发编程11. 高级主题 实际项目 C 语…...

2023网络安全面试题(附答案)+面经

前言 随着国家政策的扶持&#xff0c;网络安全行业也越来越为大众所熟知&#xff0c;相应的想要进入到网络安全行业的人也越来越多&#xff0c;为了拿到心仪的Offer之外&#xff0c;除了学好网络安全知识以外&#xff0c;还要应对好企业的面试。 所以在这里我归纳总结了一些网…...

数据结构_红黑树

1、二叉树 每一个分支不能超过两个 2、 排序数/查找树 在二叉树的基础上&#xff0c;元素是有大小顺序的左 子树 小&#xff0c;右 子树 大 3、平衡树 左孩子数 和 右孩子数 相等 4、不平衡树 5、 红黑树 特点&#xff1a;趋近于平衡树&#xff0c;查询的速度非常的快&#xf…...

一百八十八、Hive——HiveSQL查询表中的日期是星期几(亲测,附截图)

一、目的 指标需要查询以工作日和周末维度的数据统计&#xff0c;因此需要根据数据的日期判断这一天属于星期几&#xff0c;周一到周五为工作日&#xff0c;周六到周日为周末 二、SQL查询 &#xff08;一&#xff09;SQL语句 selectday,case when pmod(datediff(create_tim…...

基础题——数组

输入一个电子邮箱&#xff0c;检查用户输入的字符串是否为有效的电子邮件地址 正确的邮箱地址&#xff1a; 必须包含字符&#xff0c;不能是开头或结尾 必须以 .com结尾 和.com之间必须有其他字符 public static void main(String[] args) {Scanner sc new Scanner(System.in…...

Qt地铁智慧换乘系统浅学( 一 )存储站点,线路信息

存储 定义所需要的容器定义最大最小经纬度[统计站点信息 在经纬度网站](https://map.jiqrxx.com/jingweidu/)读取统计的信息存储到容器其他的一些相关函数debug 显示存储的信息更新最小最大经纬度的函数获取两点之间的距离 根据经纬度 定义所需要的容器 extern QMap<QStrin…...

Python之xToolkit库

文章目录 一、xToolkit是什么&#xff1f;二、准备工作1.引入库2.导入数据 三、使用时间模块-xdatetime判断时间格式是否正确get方法获取时间戳获取年月日时分秒时间推移计算时间替换时间扩展两个时间的差值开始与结束时间时间是否在指定区间中 字符串模块-xstring字符串格式校…...

2w+深度梳理!全网最全NLP面试题总结!

目录 技术交流群 1、命名实体识别常见面试篇2、关系抽取常见面试篇3、事件抽取 常见面试篇4、NLP 预训练算法常见面试篇5、Bert 常见面试篇6、文本分类 常见面试篇7、文本匹配 常见面试篇8、问答系统常见面试篇FAQ 检索式问答系统常见面试篇问答系统工具篇常见面试篇 9、对话系…...

Spring 学习(五)JavaConfig 实现配置

1. 使用 JavaConfig 实现配置 JavaConfig 是 Spring 项目的一个子项目&#xff0c;Spring 4 后成为核心功能。 注意&#xff1a; 如果开启包扫描&#xff0c;加载配置类以后就可以通过反射拿到配置类中的对象了。Bean 只写在方法上&#xff0c;返回的是一个对象&#xff0c;但…...

【Synapse数据集】Synapse数据集介绍和预处理,数据集下载网盘链接

【Segment Anything Model】做分割的专栏链接&#xff0c;欢迎来学习。 【博主微信】cvxiaoyixiao 本专栏为公开数据集的介绍和预处理&#xff0c;持续更新中。 文章目录 1️⃣Synapse数据集介绍文件结构源文件样图文件内容 2️⃣Synapse数据集百度网盘下载链接官网下载登录下…...

【运动规划算法项目实战】Dynamic Window Approach算法(附ROS C++代码)

文章目录 前言一、简介1.1 DWA算法原理1.2 DWA算法的应用场景1.4 DWA算法的优缺点1.4.1 优点1.4.2 缺点二、代码实现2.1 算法细节2.1.1 DWA的控制输入:2.1.2 动态窗口的计算2.1.3 评价函数的优化2.2 程序说明2.21 PathGenerator2.2.2 WaypointAction2.2.3 使用方法2.3 代码演示…...

第十四届蓝桥杯大赛软件赛决赛 C/C++ 大学 B 组 试题 A: 子 2023

[蓝桥杯 2023 国 B] 子 2023 试题 A: 子 2023 【问题描述】 小蓝在黑板上连续写下从 1 1 1 到 2023 2023 2023 之间所有的整数&#xff0c;得到了一个数字序列&#xff1a; S 12345678910111213 ⋯ 20222023 S 12345678910111213\cdots 20222023 S12345678910111213⋯2…...

HTML 语义化

目录 HTML 语义化HTML5 新特性HTML 语义化的好处语义化标签的使用场景最佳实践 HTML 语义化 HTML5 新特性 标准答案&#xff1a; 语义化标签&#xff1a; <header>&#xff1a;页头<nav>&#xff1a;导航<main>&#xff1a;主要内容<article>&#x…...

python打卡day49

知识点回顾&#xff1a; 通道注意力模块复习空间注意力模块CBAM的定义 作业&#xff1a;尝试对今天的模型检查参数数目&#xff0c;并用tensorboard查看训练过程 import torch import torch.nn as nn# 定义通道注意力 class ChannelAttention(nn.Module):def __init__(self,…...

智慧工地云平台源码,基于微服务架构+Java+Spring Cloud +UniApp +MySql

智慧工地管理云平台系统&#xff0c;智慧工地全套源码&#xff0c;java版智慧工地源码&#xff0c;支持PC端、大屏端、移动端。 智慧工地聚焦建筑行业的市场需求&#xff0c;提供“平台网络终端”的整体解决方案&#xff0c;提供劳务管理、视频管理、智能监测、绿色施工、安全管…...

QMC5883L的驱动

简介 本篇文章的代码已经上传到了github上面&#xff0c;开源代码 作为一个电子罗盘模块&#xff0c;我们可以通过I2C从中获取偏航角yaw&#xff0c;相对于六轴陀螺仪的yaw&#xff0c;qmc5883l几乎不会零飘并且成本较低。 参考资料 QMC5883L磁场传感器驱动 QMC5883L磁力计…...

大数据零基础学习day1之环境准备和大数据初步理解

学习大数据会使用到多台Linux服务器。 一、环境准备 1、VMware 基于VMware构建Linux虚拟机 是大数据从业者或者IT从业者的必备技能之一也是成本低廉的方案 所以VMware虚拟机方案是必须要学习的。 &#xff08;1&#xff09;设置网关 打开VMware虚拟机&#xff0c;点击编辑…...

Axios请求超时重发机制

Axios 超时重新请求实现方案 在 Axios 中实现超时重新请求可以通过以下几种方式&#xff1a; 1. 使用拦截器实现自动重试 import axios from axios;// 创建axios实例 const instance axios.create();// 设置超时时间 instance.defaults.timeout 5000;// 最大重试次数 cons…...

关于 WASM:1. WASM 基础原理

一、WASM 简介 1.1 WebAssembly 是什么&#xff1f; WebAssembly&#xff08;WASM&#xff09; 是一种能在现代浏览器中高效运行的二进制指令格式&#xff0c;它不是传统的编程语言&#xff0c;而是一种 低级字节码格式&#xff0c;可由高级语言&#xff08;如 C、C、Rust&am…...

深入解析C++中的extern关键字:跨文件共享变量与函数的终极指南

&#x1f680; C extern 关键字深度解析&#xff1a;跨文件编程的终极指南 &#x1f4c5; 更新时间&#xff1a;2025年6月5日 &#x1f3f7;️ 标签&#xff1a;C | extern关键字 | 多文件编程 | 链接与声明 | 现代C 文章目录 前言&#x1f525;一、extern 是什么&#xff1f;&…...

OpenLayers 分屏对比(地图联动)

注&#xff1a;当前使用的是 ol 5.3.0 版本&#xff0c;天地图使用的key请到天地图官网申请&#xff0c;并替换为自己的key 地图分屏对比在WebGIS开发中是很常见的功能&#xff0c;和卷帘图层不一样的是&#xff0c;分屏对比是在各个地图中添加相同或者不同的图层进行对比查看。…...

RNN避坑指南:从数学推导到LSTM/GRU工业级部署实战流程

本文较长&#xff0c;建议点赞收藏&#xff0c;以免遗失。更多AI大模型应用开发学习视频及资料&#xff0c;尽在聚客AI学院。 本文全面剖析RNN核心原理&#xff0c;深入讲解梯度消失/爆炸问题&#xff0c;并通过LSTM/GRU结构实现解决方案&#xff0c;提供时间序列预测和文本生成…...