Android中的显性Intent与隐性Intent

安卓开发之Intent使用介绍(显式Intent和隐式Intent) Intent Intent是 Android程序中各组件之间进行交互的一种重要方式,它不仅可以指明当前组件想要执行的动作,还可以在不同组件之间传递数据。Intent一般可被用于启动活动、启动服务以及发送广播等场景,这次我们运用在启动活动上面。 Intent大致可以分为两种:显式Intent和隐式Intent,我们先来看一下显式Intent如何使用。 首先我创建了2个活动. 1.FirstActivity(第一个活动) package activitytest.example.administrator.ac 阅读详情

前言:

每个应用程序都有若干个Activity组成,每一个Activity都是一个应用程序与用户进行交互的窗口,呈现不同的交互界面。因为每一个Acticity的任务不一样,所以经常互在各个Activity之间进行跳转,在Android中这个动作是靠Intent来完成的。你通过startActivity()方法发送一个Intent给系统,系统会根据这个Intent帮助你找到对应的Activity,即使这个Activity在其他的应用中,也可以用这种方法启动它。

Intent的定义

Intent是Android系统用来抽象描述要执行的一个操作,也可以在不同组件之间进行沟通和消息传递。
Intent意图可以是明确的指定组件的名称,这样你可以精确的启动某个系统组件,比如启动一个Activity。它也可以是模糊的,没有指定组件名称,只要是能够匹配到这个Intent的应用都可以接收到,比如发送一个拍照Intent,所有的拍照应用都会响应。

显式Intent和隐式Intent

显式的Intent就是你已经知道要启动的组件名称,比如某个Activity的包名和类名,在Intent中明确的指定了这个组件(Activity),一般来说这种Intent经常用在一个应用中,因为你已经明确的知道要启动的组件名称。
隐式的Intent就是你不知道要启动的组件名称,只知道一个Intent动作要执行,比如:拍照,录像,查看地图。一般来说这种Intent用在不同的应用之间传递信息。
当你创建一个显式Intent来启动一个Activity或者Service时,系统会立刻启动那个组件通过你的Intent对象。
当你创建一个隐式Intent,系统会根据manifest file中的intent filter找匹配的组件,如果你发送的Intent匹配到一个intent filter,系统会把你的Intent传递给该filter对应的组件(Activity、Service等),并且启动它。如果找到多个匹配的intent filter对应的应用程序,则会弹出一个对话框让你选择哪个应用程序接受你的Intent。
注意:
1、intent filter是一种应用程序manifest文件中的语法表达,就像是html的标签,它是一个系统组件标签(比如:Activity)的组成部分,可以说是子标签吧,这个系统组件接受什么样的intent就是用它来指定的,如果一个系统组件不写intent filter,那么它只能通过显式的intent来启动。
2、出于安全的角度,你的Service组件务必不要用隐式的intent filter来进行说明,因为用隐式的intent启动一个Service往往不能保证Service会被启动,并且用户也不知道哪个Service会响应你的Intent。从Android5.0(API 21),系统会抛出异常当你用隐式的Intent去调用bindService()方法。

创建一个Intent

Android系统通过Intent对象携带的信息来确定启动哪个系统组件,比如:准确的组件名称,哪一个类别的组件会接收到这个intent,Intent还会携带其他的信息以便于组件正确的执行action。一个Intent主要包含以下信息:
• Component name:
要启动的组件名称,在创建Intent的时候是可选的,但是它是显式Intent的重要标志,有它就意味着只有Component name匹配上的那个组件才能接收你发送出来的显示intent。如果不写那么你创建的Intent就是隐式的,系统会根据这个intent的其他信息(比如:action、data、category)来确定哪些组件来接收这个intent,所以如果你想明确的启动哪个组件,就通过component name来指定。
Intent的ComponentName属性是一个类的全称,包括包名,比如:com.example.ExampleActivity,你可以通过Intent的setComponent(),setClass(),setClassName()方法来设定,也可以通过Intent的构造方法来设定。
• Action:
意图,一个字符串变量,用来指定Intent要执行的动作类别(比如:view or pick)。你可以在你的应用程序中自定义action,但是大部分的时候你只使用在Intent中定义的action。下面是启动Activity经常用的action:
• ACTION_VIEW:
在调用startActivity()方法启动Activity时,用此action来呈现一些信息给用户,比如在相册中查看一张照片,显示一个地理位置在地图中。
• ACTION_SEND:
也被称为"share"(共享)意图,在调用startActivity()方法启动Activity时,用此action来分享一些用户想要分享的数据给其他应用程序,比如邮件app或者社交app。
想要了解更多的action可以查看Intent源码或者api,在Intent中定义了很多action,除了在Android framework中,在别处也定义了很多action,比如在Settings应用中。
你可以通过Intent的setAction()方法或者Intent的构造方法来指定action。如果你要自定义action,最好是用你的包名做前缀,比如:
在这里插入图片描述
• Data:
一个Uri对象,对应着一个数据,这个数据可能是MIME类型的。当创建一个intent时,除了要指定数据的URI之外,指定数据的类型(MIME type)也很重要,比如,一个activity能够显示照片但是无法播放视频,虽然启动Activity时URI格式很相似。指定MIME type是很重要的,它能够帮助系统找到最合适的那个系统组件来处理你的intent请求。然而,MIME type有时能够通过URI来推测出来,特别是当data是content:的URI,这样的data表明在设备中由ContentProvider提供。
只设置数据的URI可以调用setData()方法,只设置MIME类型可以调用setType()方法,如果要同时设置这两个可以调用setDataAndType()。
注意:如果要设置URI和MIME,不要调用setData()和setType(),因为会相互清除设置的参数数据,而是直接调用setDataAndType()。
• Category:
一个包含Intent额外信息的字符串,表示哪种类型的组件来处理这个Intent。任何数量的Category 描述都可以添加到Intent中,但是很多intent不需要category,下面列举一些常用的category:
• CATEGORY_BROWSABLE:
目标Activity允许从web页面上的链接(比如图片链接)启动来显示数据。
• CATEGORY_LAUNCHER:
表示这个Activity是Activity栈最初的Activity,应用程序的主Activity,可以在桌面应用程序列表找到并启动它。
你可以通过调用addCagegory()方法来设置category。
以上Intent的属性(component name、action、data and category)都是Intent的特征属性,通过这些属性Android系统可以找到哪个应用组件将会被启动。
以下的属性是Intent的额外属性,这些属性不会影响到intent的处理和启动系统组件。
• Extras:
Intent可以携带的额外key-value数据,你可以通过调用putExtra()方法设置数据,每一个key对应一个value数据。你也可以通过创建Bundle对象来存储所有数据,然后通过调用putExtras()方法来设置数据。对于数据key的名字要尽量用包名做前缀,然后再加上其他,这样来保证key的唯一性。
• Flags:
用来指示系统如何启动一个Activity(比如:这个Activity属于哪个Activity栈)和Activity启动后如何处理它(比如:是否把这个Activity归为最近的活动列表中)。

创建显式Intent:
一个显式Intent明确的指定了要启动的组件名称,比如Activity名称或者Service的名称。创建一个显式的Intent必须定义Component属性,其他的属性可选。下面的例子是创建一个Service在app中,名字叫DownloadService,功能是从网络上下载文件,你可以通过下面的代码来启动它:
在这里插入图片描述

创建隐式Intent:
一个隐式的Intent定义了将要执行的动作,任何在设备上的app都可以响应这个动作。用隐式Intent的非常的有用,当你的app不能处理某些请求动作时,但是系统中的其他应用有这个处理的能力,用户就能方便的利用其他应用完成这个操作。比如你用百度云盘下载了一个pdf文档,你在点击打开这个文档的时候百度云盘是无法打开的,但是也许你系统上安装有其他的能打开pdf文档的阅读器,这个时候就会弹出一个对话框,列举了可以打开pdf文档的应用程序,你可以自由选择一个应用程序打开你下载的文档。例如下面查看文档的例子:
在这里插入图片描述

注意:也许你的设备中没有能够执行你的隐式Intent的应用,这个时候startActivity将会失败并且你的app会出现crash,最好的办法是在startActivity之前调用resolveActivity检查一下是否有Activity可以响应。 如果系统中有一个应用程序可以响应则会直接打开那个应用程序,如果系统中有多个app可以处理这个action则会弹出对话框让你选择哪个应用程序来处理。

Android Studio中显式Intent与隐式Intent 目录一、什么是Intent二、准备工作三、显式Intent四、隐式intent 一、什么是Intent Android中的Intent是一个非常重要且常用的类,可以用来在一个组件中启动App中的另一个组件或者是启动另一个App的组件,这里所说的组件指的是Activity、Service以及Broadcast。简而言之,Intent是一种协助应用间的交互与通讯的机制 二、准备工作 创建三个新的activity 1.图片显示activity 先把需要显示的图片(.png)放进drawable xml文件 阅读详情

相关推荐

【STM32】IEC60730 Class B软件安全实现 Part2:自检库实战指南

本文是STM32 IEC60730 Class B软件安全实现的实战指南,详细介绍了如何将X-CUBE-CLASSB自检库集成到用户项目中。内容涵盖软件包解构、内存划分、启动与运行时自检的集成步骤、关键代码示例及调试技巧,并阐述了为最终通过安全认证所需的文档与流程准备,帮助开发者高效实现MCU功能安全。

weixin_29185167的博客 92

Android初学之二:显示Intent和隐示Intent

一、显式Intent 1、示范如何实现活动跳转 在按钮的点击事件里: a、调用构造函数Intent(Context packageContext,Class<?>cls),第一参数是上下文,第二个参数是想要启动的目标活动 b、将上面构建的好的intent传入startActivity(),就可以启动目标活动了 二、隐式Intent 隐式Intent要制定一系列的action和category,调用时需要相对应显应,制定的位置是在目标活动下,被调用的位置是当前的上下文 示范如何实现活动跳

My_Yes的博客 1716

TL494充电器原理与维修 (转)

TL494充电器原理与维修 电动自行车充电器多采用开关 电源,型号虽多,但电路结构大同小异,主要区别在于所选的脉宽调制(PWM)芯片不同如(UC3845、UC3842、SG3524、TL494)。现以佳腾牌 充电器为例,介绍其原理和故障检修方法。 一、电路原理 根据实物测绘的佳腾牌充电器电路原理如图1所示。整机可分为PWM产生和推动电路、功 率开关变换电路、...

weixin_30500663的博客 1815

【Android】-- Intent(显式和隐式Intent)

Android的Intent:显式和隐式Intent,什么是Intent,实例应用。

个人博客 6428

ubuntu18.04 显卡驱动问题 造成屏幕分辨变大 NVIDIA-SMI has failed because it couldn't communicate with ....等问题

问题1:装好了显卡驱动,cudnn,tensorflow等没问题,一直可以用。但是突然有一天不行了,终端输入:nvidia-smi 显示:NVIDIA-SMI has failed because it couldn't communicate with the NVIDIA driver. Make sure that the latest NVIDIA driver is installed...

梦萦飞--CV/DL/ML 2248

用python自动复制粘贴excel表里某一列的数据到另一个表中

昨天接到人事小姐姐求助减轻复制粘贴的重复工作量,分享一下代码 半路新手上路 耶 把 2.xlsx 表里的第二列 的数据复制粘贴到 test.xlsx的第一列 python3.6.2 from openpyxl import Workbook from openpyxl import load_workbook from openpyxl.writer.excel import Exc...

weixin_33854644的博客 2万+

Android Intent常用方法详细介绍,显示Intent,隐式Intent,调用浏览器,拨号,发短信,传递数据

Intent介绍 Intent是Android程序中各个组件之间进行交互的一种重要方式,它不仅可以指明当前组件想要执行的动作,还可以在不同组件之间传递数据。Intent一般用于启动活动,启动服务以及发送广播等场景。Intent大致可以分为两种,显示Intent和隐式Intent。Intent有多个构造函数的重载,其中最常用的一个是Intent(Context packageContext,Cla...

一条老狗的博客 6580

IC 时钟设计核心问题与高质量系统设计指南(附源码)

本文深入探讨了IC时钟设计的核心问题与高质量系统设计方法。时钟系统作为IC的"心脏",其性能直接影响时序稳定性、功耗效率和可靠性。文章从五个维度展开分析:时钟源选择与性能匹配、时钟分配网络设计、抖动抑制、多时钟域管理和功耗优化。针对高质量时钟系统设计,提出了时钟源优化、时钟树结构优化、干扰抑制与仿真验证等具体方法。同时,系统阐述了时钟与复位的协同设计关系,强调异步复位同步释放等技术的重要性。文章还总结了高质量IC系统设计的综合要点,包括电源/信号完整性、时序功耗平衡、可靠性设计及全流程验

Open 1061

使用Intent与IntentFilter通信(显性、隐性)以及常见的一些问题

对于何为intent显性和隐性我一直傻傻分不清楚,近来看了相关的书籍后,感觉清晰了许多。 针对intent显性可以这样理解:例如我们去买一个东西,指明了这个东西的名字,那么就是显性的。那这个显性intent在Android Studio里面又是怎么展示的呢?主要有两种形式(方式一较方式二更加简洁): //显式intent //方式一: Intent intent = new Intent(this,MainActivity2.class); startActivity(intent);

qq_50272406的博客 708

机器人中的数值优化(十二)——带约束优化问题简介、LP线性规划

本系列文章主要是我在学习《数值优化》过程中的一些笔记和相关思考,主要的学习资料是深蓝学院的课程《机器人中的数值优化》和高立编著的《数值最优化方法》等,本系列文章篇数较多,不定期更新,上半部分介绍无约束优化,下半部分介绍带约束的优化,中间会穿插一些路径规划方面的应用实例

慕羽★的博客 3852

C#串口通信从入门到精通(5)——打开、关闭串口

本文详细介绍如何打开串口

qq_34059233的博客 6785

安卓初学者笔记(五):用白话讲明白Intent是什么

自学安卓开发可不是一个好玩的事儿,主要是网上的资料大多写的太深奥,有的只写理论和术语,有的只有代码没有解释,所以看了很多也不知道Intent的作用和如何实现,想必是自己的基础差过人品的原因。 其实想说明一个问题很简单,只需要三个步骤:1、举一个生活化的例子。2、说明在安卓环境下的应用方法、基本理论。3、再写一段代码演示给初学者即可。 Intent,翻译成“意图”,很有意思,很贴切,其实完全可以

qq_18495537的博客 5613

C#对接EtherNet/IP协议 完整版|罗克韦尔AB PLC通信+CIP核心概念全解析

你做罗克韦尔(AB) PLC工业上位机开发,是唯一的首选协议,没有之一!EtherNet/IP(Ethernet Industrial Protocol)是基于标准以太网的工业级通信协议,由罗克韦尔自动化主导开发,是ODVA(开放设备网络供应商协会)主推的工业以太网标准,也是目前全球应用最广泛的工业以太网协议之一。原生适配罗克韦尔AB PLC:Micro800、CompactLogix、ControlLogix、Micro850等全系AB PLC原生标配EtherNet/IP,无需额外配置,开箱即用;

这里只有干货:从 Modbus 通信到 MES 对接,从 YOLO 训练到工控机部署,带你搞定工业软件开发全流程。 895

android Intent

自学安卓开发可不是一个好玩的事儿,主要是网上的资料大多写的太深奥,有的只写理论和术语,有的只有代码没有解释,所以看了很多也不知道Intent的作用和如何实现,想必是自己的基础差过人品的原因。 其实想说明一个问题很简单,只需要三个步骤:1、举一个生活化的例子。2、说明在安卓环境下的应用方法、基本理论。3、再写一段代码演示给初学者即可。 Intent,翻译成“意图”,很有意思,很贴切,其实完全可以...

身心进化中 262

Probability and Statistics - 4th edition

Probability and Statistics - 4th edition

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

学习Intent的使用

刚看到Intent的时候,我的确有点困惑:从字面上来说,它表示一种意图和目的;从使用上看,它似乎总是用于Activity之间的切换;而从它所在包android.content来看,它似乎与内容有关。所以,我想或许可以这样理解它: Intent类绑定一次操作,它负责携带这次操作所需要的数据以及操作的类型等。如果是这样的话,是否可以将它与事件处理联想起来?即一个Intent类似于一个Event。从

血色残阳的专栏 1143

SAP B1中文培訓教材_SDK

公司内部培训资料,对开发工具 ,DIAPI, UIAPI,Add-ON有详细解说

Android学习笔记-学习Intent的使用

 刚看到Intent的时候,我的确有点困惑:从字面上来说,它表示一种意图和目的;从使用上看,它似乎总是用于Activity之间的切换;而从它所在包 android.content来看,它似乎与内容有关。所以,我想或许可以这样理解它: Intent类绑定一次操作,它负责携带这次操作所需要的数据以及操作的类型等。  如果是这样的话,是否可以将它与事件处理联想起来?即一个Intent类似于一个Event...

weixin_34255793的博客 100

Devexpress16.2.6破解工具

Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具

Activity的跳转-Android Studio(Java)

Activity的跳转前言一、步骤总步骤1:新建两个activity2:新建三个按钮做测试string.xml文件3.绑定包4.导入5.创建变量1.显性跳转2.隐性跳转1.manifest方式2.Uri跳转浏览器二、最后笔记,仅作参考 前言 activity的跳转实例 一、步骤 总步骤 1:新建两个activity 2:新建三个按钮做测试 <!--显性跳转!--> <com.google.android.material.bottomnavigation.BottomNavi

SilckJun的博客 2141

Study on Android【三】--Intent消息传递

在前面写Android的ContentProvider时候,可以看到那是基于观察者模式的一个消息传递方法。每一个Cursor、ContentResolver做为一个小的注册中心,相关观察者可以在这个中心注册,更新消息由注册中心分发给各个观察者。而在MFC或Winform中,都会形成一个消息网,让消息在网中流动,被各节点使用、吃掉或者在出口死掉。相比之下,我个人觉得基于In...

weixin_34244102的博客 70

android学习笔记之Intent消息传递

Cocos2d-x,Android,IOS,游戏,HTML5开发/交流/学习/资源 沈大海 1372

Android学习笔记(二)

第一行代码-Android学习笔记(二)

learnNG的博客 534

Android消息传递应用功能解析

每一个Cursor、ContentResolver做为一个小的注册中心,相关观察者可以在这个中心注册,更新消息由注册中心分发给各个观察者。而在MFC或Winform中,都会形成一个消息网,让消息在网中流动,被各节点使用、吃掉或者在出口死掉。 相比之下,我个人觉得基于Intent的Android消息传递机制是有所不同的。它应该会有一个全局性的注册中心,这个注册中心是隐性的,整个Android系

曹浩洋的专栏 540

android发送消息功能,Android消息传递应用功能解析

Android手机操作系统中有一种叫做Intent的消息传递机制。这在实际编程中是一个核心技术,值得我们去深入的研究。在这里大家将会了解到有关Android消息传递的一些基础应用技巧,帮助大家理解。每一个Cursor、ContentResolver做为一个小的注册中心,相关观察者可以在这个中心注册,更新消息由注册中心分发给各个观察者。而在MFC或Winform中,都会形成一个消息网,让消息在网中流...

weixin_39815943的博客 478

Android学习笔记--activity component:intents

<br />    <br />   当接收到ContentResolver的请求时Content Provider被激活。其它的三个组件activity,service,broadcast receiver是通过一个叫做intents的异步消息来激活的。一个intent是一个承载消息内容的intent对象。对于activity和service来说,它声明了请求的操作名称以及操作的特殊的数据URI和另外一些信息。比如说,它可以承载对一个activity的请求,让它为用户显示一张图片,或者让用户编辑一些文本。

哪里 2391
上一篇: 将 Stipop Stickers 与 Stream Flutter 应用程序集成
下一篇: 快看,Android开发工程师都在学的kotlin秘籍出现了
不秃头de程序猿
博客等级 码龄5年 4089粉丝 1478原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值