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. Android:控件ListView列表项与适配器结合使用

    Listview是用来展示一些重复性的数据用的,比如一些列表集合数据展示到手机,需要适配器作为载体获取数据,最后将数据填充到布局. ListView里面的每个子项Item可以使一个字符串,也可以是一个 ...

  2. HDU1875——畅通工程再续(最小生成树:Kruskal算法)

    畅通工程再续 Description相信大家都听说一个“百岛湖”的地方吧,百岛湖的居民生活在不同的小岛中,当他们想去其他的小岛时都要通过划小船来实现.现在政府决定大力发展百岛湖,发展首先要解决的问题当 ...

  3. Android Spannable

    ApiDemo 源码至 com.example.android.apis.text.Link 类. 首先,看一下其运行效果: 要给 TextView 加上效果,方式主要有几种: 第一种,自动应用效果, ...

  4. java 死锁及解决

    Java线程死锁如何避免这一悲剧  Java线程死锁需要如何解决,这个问题一直在我们不断的使用中需要只有不断的关键.不幸的是,使用上锁会带来其他问题.让我们来看一些常见问题以及相应的解决方法: Jav ...

  5. HDU 4635 Strongly connected(强连通分量,变形)

    题意:给出一个有向图(不一定连通),问最多可添加多少条边而该图仍然没有强连通. 思路: 强连通分量必须先求出,每个强连通分量包含有几个点也需要知道,每个点只会属于1个强连通分量. 在使图不强连通的前提 ...

  6. apache开源项目--HIVE

    Hive是一个基于Hadoop的数据仓库平台.通过hive,我们可以方便地进行ETL的工作.hive定义了一个类似于SQL的查询语言:HQL,能 够将用户编写的QL转化为相应的Mapreduce程序基 ...

  7. Crosstool-ng制作交叉编译工具链

    Crosstool-ng制作交叉编译工具链 交叉编译器可以用现成的,比如CodeSourcery制作的交叉编译器,也可以自己制作,一般是用kernel+gcc+glibc+binutils的源码包来编 ...

  8. 【转】FragmentTest学习笔记1

    原文网址:http://blog.csdn.net/hishentan/article/details/20734489 源码部分: BookContent.java package com.exam ...

  9. Android中Bitmap和Drawable,等相关内容

    一.相关概念 1.Drawable就是一个可画的对象,其可能是一张位图(BitmapDrawable),也可能是一个图形(ShapeDrawable),还有可能是一个图层(LayerDrawable) ...

  10. 【JMeter】ant+jmeter生成html报告

    源博文来自于  http://my.oschina.net/hellotest/blog/517518 主要应用于接口的回归或者性能的简单查看功能.操作为先在jmeter中写好测试计划,保存为jmx文 ...