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简介的更多相关文章

  1. Intent系列讲解---Intent简介以及相关属性

    一.Intent简介 Intent中文是"意图,意向",它是Android中四大组件通讯的纽带,Intent负责对应用中一次操作的动作.动作涉及数据.附加数据进行描述,Androi ...

  2. Intent 简介 结构 传递数据 常见Action 常量 MD

    Markdown版本笔记 我的GitHub首页 我的博客 我的微信 我的邮箱 MyAndroidBlogs baiqiantao baiqiantao bqt20094 baiqiantao@sina ...

  3. Android 4 学习(11):Intent简介

    参考<Professional Android 4 Development> Intents 本文主要从这几个方面介绍Intents: 使用Intents在Android程序内部或外部通信 ...

  4. Android 中的 Intent 简介

    Intent是Android程序中各组件之间进行交互的一种重要方式,它不仅可以指明当前组件想要执行的动作,还可以在不同组件之间传递数据. ------------------------------- ...

  5. Android Intent简介

    Intent对象主要用来在Android程序的Activity,Service和BroadcastReceiver这3大组件之间传输数据,而针对这3大组件,有独立的Intent传输机制,分别如下:1. ...

  6. Intent简介-Android开发

    一.Intent介绍: Intent的中文意思是“意图,意向”,在Android中提供了Intent机制来协助应用间的交互与通讯,Intent负责对应用中一次操作的动作.动作涉及数据.附加数据进行描述 ...

  7. Intent 意图 结构 简介

    Intent简介 官方解释: An intent is an abstract description of an operation操作 to be performed展示.表演. It can b ...

  8. Android中的Intent Filter匹配规则介绍

    本文主要介绍了隐式Intent匹配目标组件的规则,若有叙述不清晰或是不准确的地方希望大家指出,谢谢大家: ) 1. Intent简介 Intent用于在一个组件(Component,如Activity ...

  9. 37.Activity之间的转换以及数据的传递(Intent)学习

      Intent简介:                                                                                在一个Androi ...

随机推荐

  1. 情人节红攻瑰--Delphi版本

    在oschina上看到了用c写的红玫瑰, 以前只见过用js写的, 就随手用delphi翻译了c的代码, 效果还不错哈.... 原c作者jokeym贴子 http://www.oschina.net/c ...

  2. Hadoop常用命令汇总

    启动Hadoop 进入HADOOP_HOME目录. 执行sh bin/start-all.sh 关闭Hadoop 进入HADOOP_HOME目录. 执行sh bin/stop-all.sh 1.查看指 ...

  3. 先说一下JS的获取方法,其要比JQUERY的方法麻烦很多,后面以JQUERY的方法作对比。

    先说一下JS的获取方法,其要比JQUERY的方法麻烦很多,后面以JQUERY的方法作对比. JS的方法会比JQUERY麻烦很多,主要则是因为FF浏览器,FF浏览器会把你的换行也当最DOM元素 复制代码 ...

  4. ajax返回son数据

    JSON 只是一种文本字符串.它被存储在 responseText 属性中 为了读取存储在 responseText 属性中的 JSON 数据,需要根据 JavaScript 的 eval 语句. 函 ...

  5. 如何在给快满的Linux分区"无伤"扩容

    1. 首先在虚拟机设置里面设置磁盘的扩展,前提条件是该虚拟机没有快照. 2. 在虚拟机设置好以后,需要开机在系统里扩容磁盘 3. 使用 # fdisk /dev/sda 扩展磁盘,具体操作使用 m 选 ...

  6. C#.Net 如何动态加载与卸载程序集(.dll或者.exe)5-----Assembly.Unload

    http://www.blogcn.com/user8/flier_lu/index.html?id=2164751&run=.04005F8 CLR 产品单元经理(Unit Manager) ...

  7. VS2010调试 --指南 Reference from : http://blog.csdn.net/kingzone_2008/article/details/8133048

    1 导言 在软件开发周期中,测试和修正缺陷(defect,defect与bug的区别:Bug是缺陷的一种表现形式,而一个缺陷是可以引起多种Bug的) 的时间远多于写代码的时间.通常,debug是指发现 ...

  8. Android2.3.7源码结构分析

    对Andorid系统进行分析或者系统功能定制的时候,我们经常需要在众多文件中花费大量时间定位所需关注的部分.为了减轻这部分枯燥而不可避免的工作,本文对2.3.7版本的源码结构进行了简单分析.希望对刚加 ...

  9. tcp连接的3次握手

    http://www.tcpipguide.com/free/t_TCPConnectionEstablishmentProcessTheThreeWayHandsh-3.htm synchronou ...

  10. tomcat+nginx+redis实现均衡负载、session共享(一)

    在项目运营时,我们都会遇到一个问题,项目需要更新时,我们可能需先暂时关闭下服务器来更新.但这可能会出现一些状况: 1.用户还在操作,被强迫终止了(我们可以看日志等没人操作的时候更新,但总可能会有万一) ...