IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 移动开发 -> Android学习(三)Intent -> 正文阅读

[移动开发]Android学习(三)Intent

Intent是一个动作的完整描述,包含了产生组件、接收组件和传递数据信息。Android中提供了Intent机制来协助应用间的交互与通讯Intent不仅可用于应用程序之间,也可用于应用程序内部 的 Activity / Service之间的交互。因此,Intent在这里起着一个媒体中介的作用,专门提供组件互相调用的相关信息,实现调用者与被调用者之间的解耦。

Intent由动作、数据、分类、类型、组件和扩展信息等内容组成

Action属性用于描述Intent要完成的动作:

Data属性是执行动作的URI和MIME类型(执行的目标对象)?

Action和data一般匹配使用(这两个属性是最重要的):?

Category属性指明一个执行Action的分类(。例如 LAUNCHER_CATEGORY 表示Intent 的接受者应该在Launcher中作为顶级应用出现;而ALTERNATIVE_CATEGORY表示当前的Intent是一系列的可选动作中的一个,这些动作可以在同一块数据上执行。):

Component属性用于指明Intent目标组件的类名称

通常(隐式)intent是根据Intent中包含的其他属性的信息,比如Action、Data/Type、Category进行查找,最终找到一个与之匹配的目标组件。但是,如果指定了Component这个属性(显式),Intent则会 直接根据组件名查找到相应的组件,而不再执行上述查找过程。指定Component属性后, Intent的其他属性都是可选的。

Extra属性用于添加一些附加信息:例如发送一个邮件,就可以通过Extra属性来添加主题 (subject)和内容(body)。这边putExtra()一些信息就可以被在那边用getExtra()取出。

根据Intent寻找目标组件时所采用的方式不同,可以将Intent分为两类:直接Intent和间接 Intent。又称为显式Intent与隐式Intent 。

显式intent:

一般就是已知组件名

?

直接传递到构造函数或者用set方法设置。

隐式intent(一般选择此方式):

隐式Intent,不指定具体的组件,但是它会声明将要执行的操作,从而匹配到相应的组件。这种方式通过Intent Filter过滤实现,过滤时通常根据Action、Data和Category属性进行匹配查找。 Android提供了两种生成Intent Filter的方式:一种是通过IntentFilter类生成;另一种通过在配置文件 AndroidManifest.xml中定义元素生成。

匹配原则:

<intent-filter>标签中常用<action>、<data>和<category>这些子元素(其实就是表明所处的activity的属性或是能力,如果和程序中所需intent目标组件匹配则可以将其使用

其中<action>属性不能为空,否则所有的Intent都会因匹配失败而被阻塞。

当发送一个隐式Intent后,系统会将它与设备中的每一个组件的过滤器进行匹配,匹配属性有Action、 Category、Data三个需要这三个属性都匹配成功才能唤起相应的组件。

过滤器中有多个action项时,隐式Intent中的Action属性,与组件中的某一个过滤器的Action能够匹配(如果一个过滤器声明了多个 Action属性,只需要匹配其中一个就行,就已经说明能满足要求了),那么就算是匹配成功.

过滤器中有多个category项时,过滤器的Category属性内容必须是大于或者等于隐式Intent的Category属性时候,隐 式Intent才能匹配成功。如果一个隐式Intent没有设置Category属性,那么它可以通过任何一个过滤器 的Category匹配。

过滤器中有多个data项时,用于指定组件可以执行的数据。每个Data属性都可以指定数据的URI结构(数据地址)和数据MIME类型(数据类型)。

Data匹配时候,MIME类型和URI两者都会进行匹配,匹配规则如下:

如果过滤器未声明URI和MIME类型,则只有不含URI和MIME类型的隐形Intent才能 匹配成功

如果过滤器中声明URI但是未声明MIME类型(也不能从URI中分析出MIME类型), 则只有URI与过滤器URI相同且不包含MIME类型的隐式Intent才能匹配成功

如果过滤器声明MIME类型但是未声明URI,只有包含相同MIME类型但是不包含URI 的隐式Intent才能匹配成功

如果过滤器声明了URI和MIME类型(既可以是直接设置,也可以是从URI分析出来) ,只有包含相同的URI和MIME类型的隐式Intent才能匹配成功

总结一下就是:基本隐式intent和intentfilter的这URI和MIME两个属性无论可知未知哪个都必须一模一样。

URI匹配原则:

Uri基本结构:

[scheme:][//authority][path][?query][#fragment]???authority还可以细分为host和port

[scheme:][//host:port][path][?query][#fragment]??

在URI中,每个组成部分都是可选的,但是有线性的依赖关系 ①如果没有scheme部分,那么host部分会被忽略 ②如果没有host部分,那么port部分会被忽略 ③如果host部分和port部分都没有,那么path部分会被忽略 当进行URI匹配时候,并不是比较全部,而是局部对比,以下是URI匹配规则。 ①如果一个URI仅声明了scheme部分,那么所有拥有与其相同的scheme的URI都会通过 匹配,其他部分不做匹配 ②如果一个URI声明了scheme部分和authority部分,那么拥有与其相同scheme和 authority的URI才能匹配成功,path部分不做匹配 ③如果一个URI所有的部分都声明了,那么只有所有部分都相同的URI才能匹配成功

?实例:

在Android世界的四大组件Activity、BroadcastReceiver、Service、Content Provider中,前三个都是 通过Intent来解析进行跳转的,Intent可以说是连接这四大组件的重要桥梁。

先学习intent实现三种activity跳转:

不带参跳转:

Intent intent = new Intent(xxx.this(当前环境activity),xxx.class(目标activity));

startActivity(intent);

带参数跳转:

其实就是以键值对形式往在startActivity前往intet里面putExtra(键,值)

目标activity中直接getIntent().getExtra(键)。

?

带返回值的跳转:

在跳转的Activity端,调用 startActivityForResult(intent, 1),跳转到 下一个Activity,其中第一个参数为传入的意图对象(里面封装了目的activity类和其余信息),第二个为设置的请求码

?

跳转到第二个Activity后,调用 setResult(100, intent)方法可返回上一个 Activity,其中第一个参数为结果码,第二 个为传入的意图对象;

?

在第一个Activity通过onActivityResult()方 法获得返回的数据 得先判断是否是自己的那个请求以及请求的结果是否同意:

?

?

  移动开发 最新文章
Vue3装载axios和element-ui
android adb cmd
【xcode】Xcode常用快捷键与技巧
Android开发中的线程池使用
Java 和 Android 的 Base64
Android 测试文字编码格式
微信小程序支付
安卓权限记录
知乎之自动养号
【Android Jetpack】DataStore
上一篇文章      下一篇文章      查看所有文章
加:2021-10-07 13:57:32  更:2021-10-07 13:59:02 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/24 0:27:48-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码