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. 传智博客(JavaWeb方面的所有知识)听课记录(经典)

    一.       JavaWeb基础 第一天: 1.Eclipse详解: (1).Bad versionnumber in .class file:编译器版本和运行(JRE)版本不符合.高的JRE版本 ...

  2. 如何快速查看linux的发行版信息

    思路一: 在CentOS中想查看发行版信息,输入了lsb_release -a 命令却报错了,通过输入以下命令进行安装 yum install redhat-lsb -y 然后继续查看发行版信息 [r ...

  3. 去除windows的Shift+Space 全角半角切换

    windows7下的输入法,有一个“全/半角切换”的快捷方式“Shift+Space”,我们可以通过以下方式查看到: “开始”->“控制面板”->“区域和语言”->“键盘和语言”-& ...

  4. 【HDOJ】4412 Sky Soldiers

    1. 题目描述有$k$个伞兵跳伞,有$m$个汇点.当伞兵着陆后,需要走向离他最近的汇点.如何选择这$m$个结点,可以使得士兵最终行走的距离的期望最小.求这个最小的期望. 2. 基本思路假设已经选好了这 ...

  5. Emulator control为灰色的情况

    新建了一个虚拟机,然后发现Emulator control为灰色,让eclipse重启下就可以了,然后就可以使用了.

  6. 解锁windowsphone设备遇到的错误:检查Miscrosoft账户凭据、请重新注册 0x80004005 解决方案

    本篇文章主要讲在解锁windowsphone设备时遇到的错误 Error1:登录windowsphone开发人员中心时出错,请检查您的miscrosoft账户凭据 Error2:注册您的手机时出现未知 ...

  7. compass和sass很好的两篇文章

    Sass是一种"CSS预处理器",可以让CSS的开发变得简单和可维护.但是,只有搭配Compass,它才能显出真正的威力. 本文介绍Compass的用法.毫不夸张地说,学会了Com ...

  8. UVa 1637 (概率) Double Patience

    题意: 一共有9堆牌,每堆牌四张.每次可以取堆顶点数相同的两张牌,如果有多种方案则选取是随机的. 如果最后将所有牌取完,则视为游戏胜利,求胜利的概率. 分析: 用一个九元组表示状态,分别代表每堆牌剩余 ...

  9. 【转】Android开发20——单个监听器监听多个按钮点击事件

    原文网址:http://woshixy.blog.51cto.com/5637578/1093936 原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 .作者信息和本声明.否则将追究法律 ...

  10. Spring Bean之间的关系

    bean之间的关系:继承和依赖继承bean的配置 Spring允许继承bean的配置,被继承的bean称为父bean,继承这个父bean的bean称为子bean 子bean从父bean中继承配置,包括 ...