Intent简介
1 Intent概念
1.1 Intent的作用
- 指明Intent所要启动的对象
- 提供将要启动对象组件运行需要的数据
| 组件类型 | 启动方法 |
| Activity |
startActivity(Intent intent) startActivityForResult(Intent intent, int requestCode) |
| Service |
ComponentName startService(Intent service) boolean bindService(Intent intent, ServiceConnection conn, int flags) |
| BroadcastReceiver |
sendBroadcast(Intent intent) sendBroadcast(Intent intent,String receivePermission) sendOrderedBroadcast(Intent intent, String receiverPermission, ...) sendStick |
1.2 Intent的工作原理

2 Intent的类型
2.1 显式Intent(explicit)
- 通过一个完全限定的字符串明确只能Intent所要启动的组件。
- 在App内部启动都用explicit方式,如果要启动另外一个App则需要使用隐式Intent
- Service启动必须采用显式Intent,且API 21对于隐式启动Service抛出异常。
- 不要求<activity>中有<intent-fliters>元素
2.2 隐式Intent
- 是为Intent的指定一个抽象的动作,允许该组件调用另外一个APP完成该Action
- <Activity>中必须定义<intent-filters>元素
- Intent根据自身内容去寻找特性匹配的Activity
- Intent-fliter是向系统注册该Activity的特性
3 创建Intent
3.1 Intent的属性
- Component属性:是可选的,指定将要启动组件的包名与类名;显式Intent必须指定该属性
- Action属性:代表Intent索要完成的一个抽象动作,该属性只指定一个抽象动作,并不具体指定哪个组件;一个Intent只能包含一个Action
- Category属性:用于为Action增加额外的类别信息,与Action结合使用,决定调用那个组件;一个Intent可以包含多个category。category默认为CATEGORY_DEFAULT=android.intent.category.DEFAULT
- Data属性:通常向Action属性提供操作的数据,Data属性接受一个Uri对象,一个Uri对象通常形式为:schema://host:port/path
- Type属性:用于指定该Data所指定Uri对应的MIME类型,需要为符合adc/xyz格式的字符串
3.2 <intent-fliter>
<intent-fliter>是androidmaifest.xml文件<activity>元素的子元素,用于配置该Activity所能响应的Intent。该元素包含3个子元素:
- 0-N个<Action>
- 0-N个<category>
- 0-1个<data>
3.3 Data属性与Type属性的关系
- 如果为Intent先设置Data属性,后设置Type属性,那么Type属性将会覆盖Data属性
- 如果为Intent先设置Type属性,后设置Data属性,那么Data将会覆盖Type
- 如果希望Intent既有Data属性,也有Type属性,应该调用Intent的setDataAndType()
3.4 在Androidmainfest.xml中Data与Type是通过<data>元素的属性来设置
- mimeType:用于表明该组件所能匹配的Intent的Type属性
- schema:用于声明该组件所能匹配的Intent的Data属性的schema部分
- host:用于声明该组件所能匹配的Intent的Data的host部分
- port:用于声明该组件所能匹配的Intent的Data的port部分
- path:用于声明该组件所能匹配的Intent的Data的path部分
- pathPrefix:用于声明该组件所能匹配的Intent的Data的path前缀
- pathPattern:用于声明该组件所能匹配的Intent的Data的path部分
4 PendingIntent的用法
简单说,PendingIntent是一个延迟执行的Intent。PendingIntent打包当前的Content与intent,保留Intent执行的现场环境,再后期需要执行的时候进行执行。主要使用场景有如下三种:
- 当执行通知用户的操作时,用户可能不会立即执行该Intent,故使用PendingIntent
- 用户将要对于桌面小部件执行Intent时,用pendingIntent
- 指定一个Intent将要在某个特定的时间执行
5 Intent与componet匹配规则
5.1 Action test
- 若Intent有1个action(其只能有1个),filter有Action,则必须有1个以上匹配可通过。
- 若Intent有1个Action,filter有0个Action,则不能pass
- 若Intent有0个action,则必通过
5.2 category test
- 非必需检查,intent没有category将通过,
- 否则filter必须大于等于intent的category的集合(都允许多余1个)
5.3 data属性的依赖性
- 若不指定scheme,则host可以忽略
- 若不指定host,则port可以忽略
- 若scheme与host都不指定,则path可以忽略
5.4 URI的匹配
- 若filter只指明scheme,则所有与scheme匹配的Intent URI通过
- 若filter指明scheme、host、port,则URI有同样的scheme、host、port通过
- 若filter指明scheme、host、port、path;则URI所有都需匹配
5.5 URI MEME type的匹配
- Intent的URI和MIME都未指明,只有当filter也不包含URI和MIME Type
- intent中有URI无MIME type(neither explicit nor inferable from the URI),则仅当filter的URI匹配,但没有MiME type 通过
- intent中无URI有MIME type,则仅当filter中有同样的MiME type, 没有URI通过
- Intent中有URI和MIME type,只要filter的MIME type匹配即可通过,URI免检(该规则意味着app可以从a file or content provider得到数据)
Intent简介的更多相关文章
- Intent系列讲解---Intent简介以及相关属性
一.Intent简介 Intent中文是"意图,意向",它是Android中四大组件通讯的纽带,Intent负责对应用中一次操作的动作.动作涉及数据.附加数据进行描述,Androi ...
- Intent 简介 结构 传递数据 常见Action 常量 MD
Markdown版本笔记 我的GitHub首页 我的博客 我的微信 我的邮箱 MyAndroidBlogs baiqiantao baiqiantao bqt20094 baiqiantao@sina ...
- Android 4 学习(11):Intent简介
参考<Professional Android 4 Development> Intents 本文主要从这几个方面介绍Intents: 使用Intents在Android程序内部或外部通信 ...
- Android 中的 Intent 简介
Intent是Android程序中各组件之间进行交互的一种重要方式,它不仅可以指明当前组件想要执行的动作,还可以在不同组件之间传递数据. ------------------------------- ...
- Android Intent简介
Intent对象主要用来在Android程序的Activity,Service和BroadcastReceiver这3大组件之间传输数据,而针对这3大组件,有独立的Intent传输机制,分别如下:1. ...
- Intent简介-Android开发
一.Intent介绍: Intent的中文意思是“意图,意向”,在Android中提供了Intent机制来协助应用间的交互与通讯,Intent负责对应用中一次操作的动作.动作涉及数据.附加数据进行描述 ...
- Intent 意图 结构 简介
Intent简介 官方解释: An intent is an abstract description of an operation操作 to be performed展示.表演. It can b ...
- Android中的Intent Filter匹配规则介绍
本文主要介绍了隐式Intent匹配目标组件的规则,若有叙述不清晰或是不准确的地方希望大家指出,谢谢大家: ) 1. Intent简介 Intent用于在一个组件(Component,如Activity ...
- 37.Activity之间的转换以及数据的传递(Intent)学习
Intent简介: 在一个Androi ...
随机推荐
- Android:控件ListView列表项与适配器结合使用
Listview是用来展示一些重复性的数据用的,比如一些列表集合数据展示到手机,需要适配器作为载体获取数据,最后将数据填充到布局. ListView里面的每个子项Item可以使一个字符串,也可以是一个 ...
- HDU1875——畅通工程再续(最小生成树:Kruskal算法)
畅通工程再续 Description相信大家都听说一个“百岛湖”的地方吧,百岛湖的居民生活在不同的小岛中,当他们想去其他的小岛时都要通过划小船来实现.现在政府决定大力发展百岛湖,发展首先要解决的问题当 ...
- Android Spannable
ApiDemo 源码至 com.example.android.apis.text.Link 类. 首先,看一下其运行效果: 要给 TextView 加上效果,方式主要有几种: 第一种,自动应用效果, ...
- java 死锁及解决
Java线程死锁如何避免这一悲剧 Java线程死锁需要如何解决,这个问题一直在我们不断的使用中需要只有不断的关键.不幸的是,使用上锁会带来其他问题.让我们来看一些常见问题以及相应的解决方法: Jav ...
- HDU 4635 Strongly connected(强连通分量,变形)
题意:给出一个有向图(不一定连通),问最多可添加多少条边而该图仍然没有强连通. 思路: 强连通分量必须先求出,每个强连通分量包含有几个点也需要知道,每个点只会属于1个强连通分量. 在使图不强连通的前提 ...
- apache开源项目--HIVE
Hive是一个基于Hadoop的数据仓库平台.通过hive,我们可以方便地进行ETL的工作.hive定义了一个类似于SQL的查询语言:HQL,能 够将用户编写的QL转化为相应的Mapreduce程序基 ...
- Crosstool-ng制作交叉编译工具链
Crosstool-ng制作交叉编译工具链 交叉编译器可以用现成的,比如CodeSourcery制作的交叉编译器,也可以自己制作,一般是用kernel+gcc+glibc+binutils的源码包来编 ...
- 【转】FragmentTest学习笔记1
原文网址:http://blog.csdn.net/hishentan/article/details/20734489 源码部分: BookContent.java package com.exam ...
- Android中Bitmap和Drawable,等相关内容
一.相关概念 1.Drawable就是一个可画的对象,其可能是一张位图(BitmapDrawable),也可能是一个图形(ShapeDrawable),还有可能是一个图层(LayerDrawable) ...
- 【JMeter】ant+jmeter生成html报告
源博文来自于 http://my.oschina.net/hellotest/blog/517518 主要应用于接口的回归或者性能的简单查看功能.操作为先在jmeter中写好测试计划,保存为jmx文 ...