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 ...
随机推荐
- 情人节红攻瑰--Delphi版本
在oschina上看到了用c写的红玫瑰, 以前只见过用js写的, 就随手用delphi翻译了c的代码, 效果还不错哈.... 原c作者jokeym贴子 http://www.oschina.net/c ...
- Hadoop常用命令汇总
启动Hadoop 进入HADOOP_HOME目录. 执行sh bin/start-all.sh 关闭Hadoop 进入HADOOP_HOME目录. 执行sh bin/stop-all.sh 1.查看指 ...
- 先说一下JS的获取方法,其要比JQUERY的方法麻烦很多,后面以JQUERY的方法作对比。
先说一下JS的获取方法,其要比JQUERY的方法麻烦很多,后面以JQUERY的方法作对比. JS的方法会比JQUERY麻烦很多,主要则是因为FF浏览器,FF浏览器会把你的换行也当最DOM元素 复制代码 ...
- ajax返回son数据
JSON 只是一种文本字符串.它被存储在 responseText 属性中 为了读取存储在 responseText 属性中的 JSON 数据,需要根据 JavaScript 的 eval 语句. 函 ...
- 如何在给快满的Linux分区"无伤"扩容
1. 首先在虚拟机设置里面设置磁盘的扩展,前提条件是该虚拟机没有快照. 2. 在虚拟机设置好以后,需要开机在系统里扩容磁盘 3. 使用 # fdisk /dev/sda 扩展磁盘,具体操作使用 m 选 ...
- C#.Net 如何动态加载与卸载程序集(.dll或者.exe)5-----Assembly.Unload
http://www.blogcn.com/user8/flier_lu/index.html?id=2164751&run=.04005F8 CLR 产品单元经理(Unit Manager) ...
- VS2010调试 --指南 Reference from : http://blog.csdn.net/kingzone_2008/article/details/8133048
1 导言 在软件开发周期中,测试和修正缺陷(defect,defect与bug的区别:Bug是缺陷的一种表现形式,而一个缺陷是可以引起多种Bug的) 的时间远多于写代码的时间.通常,debug是指发现 ...
- Android2.3.7源码结构分析
对Andorid系统进行分析或者系统功能定制的时候,我们经常需要在众多文件中花费大量时间定位所需关注的部分.为了减轻这部分枯燥而不可避免的工作,本文对2.3.7版本的源码结构进行了简单分析.希望对刚加 ...
- tcp连接的3次握手
http://www.tcpipguide.com/free/t_TCPConnectionEstablishmentProcessTheThreeWayHandsh-3.htm synchronou ...
- tomcat+nginx+redis实现均衡负载、session共享(一)
在项目运营时,我们都会遇到一个问题,项目需要更新时,我们可能需先暂时关闭下服务器来更新.但这可能会出现一些状况: 1.用户还在操作,被强迫终止了(我们可以看日志等没人操作的时候更新,但总可能会有万一) ...