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 ...
随机推荐
- iOS如何把导航默认的返回按钮设置成“返回”
版权声明:本CSDN博客所有文章不更新,请关注标哥博客:http://www.henishuo.com/ - (void)addBackItemWithAction:(SEL)action { if ...
- Hadoop常用命令汇总
启动Hadoop 进入HADOOP_HOME目录. 执行sh bin/start-all.sh 关闭Hadoop 进入HADOOP_HOME目录. 执行sh bin/stop-all.sh 1.查看指 ...
- 一步一步制作yaffs/yaffs2根文件系统(三)---使用glibc库构造 /lib
开发环境:Ubuntu 12.04 开发板:mini2440 256M NandFlash 64M SDRAM glibc库:点此下载 交叉编译器:arm-linux-gcc 4.4.3点此可下 ...
- C动态内存分配(C与指针实例)
主要初步介绍malloc.free.calloc.realloc的基本.日后会有更详细的内容. malloc.free分别用于动态内存分配和释放. malloc会从内存池里提取一块合适的内存(连续的) ...
- MySQL 普通索引、唯一索引和主索引
1.普通索引 普通索引(由关键字KEY或INDEX定义的索引)的唯一任务是加快对数据的访问速度.因此,应该只为那些最经常出现在查询条件(WHEREcolumn=)或排序条件(ORDERBYcolumn ...
- C# 第三方DLL,可以实现PDF转图片,支持32位系统、64位系统
itextsharp.dll,是一个开源的在C#中用来生成PDF文档的库文件,不少C#爱好者用它制作出了PDF文档生成器.使用时只需在你的C#项目中添加引入此组件即可,使用方法网上有很多,自己查阅一下 ...
- Android开发之隐式Intent中Intent-filter的三个属性-action,category,data
使用隐式Intent时,需要使用到意图过滤器Intent-filter.Intent-filter含有三个属性:action,category,data.通过这三个属性的组合,可以启动想要启动的act ...
- Android开发之一个未解决的bug
使用Activity之间传递数据的时候,出现了一个bug,但是没有找到哪里出错了. 把代码和log都记录下来,以后研究 代码: MainActivity.class package com.examp ...
- 菜单练习-关机&取消
#include<stdio.h> #include<string.h> #include<stdlib.h> #include<time.h> voi ...
- poj1062
经典的图论建模题: 先拿开的等级问题不看: 每个物品本身的价格就是有一个自定义源点到这个点距离: 有了A物品B物品优惠为W就代表由B到A的有向路权值为W: 最后的最小花费就是源点的点1的最短路径(酋长 ...