当前位置: 首页 > 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…...

[ICLR 2022]How Much Can CLIP Benefit Vision-and-Language Tasks?

论文网址&#xff1a;pdf 英文是纯手打的&#xff01;论文原文的summarizing and paraphrasing。可能会出现难以避免的拼写错误和语法错误&#xff0c;若有发现欢迎评论指正&#xff01;文章偏向于笔记&#xff0c;谨慎食用 目录 1. 心得 2. 论文逐段精读 2.1. Abstract 2…...

【论文笔记】若干矿井粉尘检测算法概述

总的来说&#xff0c;传统机器学习、传统机器学习与深度学习的结合、LSTM等算法所需要的数据集来源于矿井传感器测量的粉尘浓度&#xff0c;通过建立回归模型来预测未来矿井的粉尘浓度。传统机器学习算法性能易受数据中极端值的影响。YOLO等计算机视觉算法所需要的数据集来源于…...

今日科技热点速览

&#x1f525; 今日科技热点速览 &#x1f3ae; 任天堂Switch 2 正式发售 任天堂新一代游戏主机 Switch 2 今日正式上线发售&#xff0c;主打更强图形性能与沉浸式体验&#xff0c;支持多模态交互&#xff0c;受到全球玩家热捧 。 &#x1f916; 人工智能持续突破 DeepSeek-R1&…...

安全突围:重塑内生安全体系:齐向东在2025年BCS大会的演讲

文章目录 前言第一部分&#xff1a;体系力量是突围之钥第一重困境是体系思想落地不畅。第二重困境是大小体系融合瓶颈。第三重困境是“小体系”运营梗阻。 第二部分&#xff1a;体系矛盾是突围之障一是数据孤岛的障碍。二是投入不足的障碍。三是新旧兼容难的障碍。 第三部分&am…...

Selenium常用函数介绍

目录 一&#xff0c;元素定位 1.1 cssSeector 1.2 xpath 二&#xff0c;操作测试对象 三&#xff0c;窗口 3.1 案例 3.2 窗口切换 3.3 窗口大小 3.4 屏幕截图 3.5 关闭窗口 四&#xff0c;弹窗 五&#xff0c;等待 六&#xff0c;导航 七&#xff0c;文件上传 …...

【MATLAB代码】基于最大相关熵准则(MCC)的三维鲁棒卡尔曼滤波算法(MCC-KF),附源代码|订阅专栏后可直接查看

文章所述的代码实现了基于最大相关熵准则(MCC)的三维鲁棒卡尔曼滤波算法(MCC-KF),针对传感器观测数据中存在的脉冲型异常噪声问题,通过非线性加权机制提升滤波器的抗干扰能力。代码通过对比传统KF与MCC-KF在含异常值场景下的表现,验证了后者在状态估计鲁棒性方面的显著优…...

mac:大模型系列测试

0 MAC 前几天经过学生优惠以及国补17K入手了mac studio,然后这两天亲自测试其模型行运用能力如何&#xff0c;是否支持微调、推理速度等能力。下面进入正文。 1 mac 与 unsloth 按照下面的进行安装以及测试&#xff0c;是可以跑通文章里面的代码。训练速度也是很快的。 注意…...

在鸿蒙HarmonyOS 5中使用DevEco Studio实现指南针功能

指南针功能是许多位置服务应用的基础功能之一。下面我将详细介绍如何在HarmonyOS 5中使用DevEco Studio实现指南针功能。 1. 开发环境准备 确保已安装DevEco Studio 3.1或更高版本确保项目使用的是HarmonyOS 5.0 SDK在项目的module.json5中配置必要的权限 2. 权限配置 在mo…...

LangChain 中的文档加载器(Loader)与文本切分器(Splitter)详解《二》

&#x1f9e0; LangChain 中 TextSplitter 的使用详解&#xff1a;从基础到进阶&#xff08;附代码&#xff09; 一、前言 在处理大规模文本数据时&#xff0c;特别是在构建知识库或进行大模型训练与推理时&#xff0c;文本切分&#xff08;Text Splitting&#xff09; 是一个…...