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 ...
随机推荐
- spring 异常管理机制
三.异常处理的几种实现: 3.1.在经典的三层架构模型中,通常都是这样来进行异常处理的: A.持久层一般抛出的是RuntiomeException类型的异常,一般不处理,直接向上抛出. B.业务层一般 ...
- Servlet课程0425(七) 到数据库中去验证用户,同时防止SQL注入漏洞
Login.java //登录界面 package com.tsinghua; import javax.servlet.http.*; import java.io.*; public class ...
- Javascript String类的属性及方法
String 类 Attribute and method anchor() 创建一个<a>标签的实例,将其name属性设置为被传递给此方法的字符串 big() ...
- 【HDOJ】2385 Stock
水题,逆向做+优先级队列. /* 2385 */ #include <iostream> #include <sstream> #include <string> ...
- bzoj1821: [JSOI2010]Group 部落划分 Group
kruskal算法. #include<cstdio> #include<algorithm> #include<cstring> #include<cmat ...
- 使用Unity3D自带动画系统制作下雨效果
之前看了以前版本的unity3d demo AngryBots ,觉得里面的下雨效果不错,刚好前段时间学习了,写出来跟大家分享下,直接开始. 使用自带动画系统制作下雨效果. 先制作下雨的雨滴涟漪 步骤 ...
- 各种好用的工具之一 ---- PNGGauntlet
1.PNGGauntlet实际上是一个图形前端,压缩图像的过程中使用的是PNGOUT, OptiPNG, 和DeflOpt这三款软件. 软件官网:http://pnggauntlet.com/ 可自行 ...
- Mysql slave 状态之Seconds_Behind_Master
在MySQL的主从环境中,我们可以通过在slave上执行show slave status来查看slave的一些状态信息,其中有一个比较重要的参数Seconds_Behind_Master.那么你是否 ...
- ORACLE DATAGURARD 折腾记二
前文再续,书接上一回,这次折腾Data Guard的一个重要目的是利用switchover实现机器的升级,怎么switchover呢?按照我的理解,Data Guard的角色切换是这样一个过程: (1 ...
- (转载)【C++】new A和new A()的区别详解
(转载)http://blog.csdn.net/xiajun07061225/article/details/8796257 我们在C++程序中经常看到两种new的使用方式:new A以及new A ...