1.Intent是组件间调用的桥梁。
2.Android系统定义了很多Intent
   http://developer.android.com/guide/components/intents-common.html
3.Intent
   Intent包括的内容可以有以下一个或多个
  • 操作
  • 数据
  • extra数据
  • 组件名称
   包含组件名称的Intent叫显示Intent,否则
   叫隐式Intent。显示Intent在做目标活动匹配时会忽略掉除组件名称的其他部分内容。
    new Intent(Intent.ACTION_DIAL)  //操作
    intent.setData(Uri.parse("http://www.google.com")); //数据
    putExtra(String name,...);//extra数据
    intent.setComponent(new ComponentName("com.android.contacts","com.android.contacts.DialContactsEntryActivity"));//组件名称

 

4.数据是对URI进行解析的结果,可能是http网页,也可能是ContentProvider...这根据数据模式来确定例如:content:,file:等。
   接收的Intent需要通过Intent过滤器来声明是否能处理这种数据模式。
5.预定义的操作
   http://developer.android.com/guide/topics/manifest/data-element.html
6.extra数据可以给目标组件提供更多的信息。 extra data通过android.os.Bundle表示,就是键值对的形式,键通常以包名开头,值是任意对象。需要实现android.os.Parcelable接口。
   putExtra方法是复制操作。
7.使用组件名称直接调用组件。包名和类名需要完全限定。
8.组件的类别。
   预定义的category
   http://developer.android.com/reference/android/content/Intent.html#CATEGORY_ALTERNATIVE
9.Intent包括的4部分内容中,如果没有指定组件名称,则为隐式Intent,对于使用隐式Intent来启动其他组件,则对目标组件的确定就是通过剩下3部分综合作用来确定的。
   应用应该在声明文件中编写Intent过滤器,用于android系统确定Intent与应用是否匹配。Intent过滤器的格式

 
     如果设置Intent时设置了data(uri),则数据类型应被设置

<intent-filter>
          <action android:value="android.intent.action.MAIN" />
          <category android:value="android.intent.category.HOME" />
          <category android:value="android.intent.category.DEFAULT />
          ....
   </intent-filter>

 

匹配的基本规则:操作(action),类型(category),数据特征(data android:name 和 data andriod.mimeType)必须与过滤器匹配。
   具体的规则:
   操作:过滤器不包含则匹配所有操作,如果包括则必须匹配。
   数据:过滤器没有指定数据特征则不匹配任何包括数据特征的Intent调用,如果包括则必须匹配。
   数据类型 (data android:mimeType):必须匹配。 数据类型的确定有两种方式
                                    a.传入的URI是内容或文件URI,这由ContentProvider或android来确定
                                    b.显示获取intent.getType()。这个需要在客户端构造Intent的时候调用setType(),调用setType就不应该设置URI,因为setType会自动设置。
   数据模式,数据授权,数据路径协同匹配,即最长匹配。
   Intent类别:调用intent中的所有type必须包含在intent过滤器中。调用intent如果没有包含任何类别则当做default类别,所以希望通过隐式Intent调用的组件必须声明DEFAULT类别。

 
 

android学习五 Intent的更多相关文章

  1. Android学习之 Intent详解

    一. Intent 作用 Intent 是一个将要执行的动作的抽象的描述,一般来说是作为参数来使用,由Intent来协助完成android各个组件之间的通讯.比如说调用startActivity()来 ...

  2. (转载)Android学习之Intent使用

    ndroid学习之Intent使用   1.使用显示Intent Intent intent = new Intent(FirstActivity.this,SecondActivity.class) ...

  3. Android学习笔记-Intent(一)

    Intent对象在Android官方API这样描述:It is a passive data structure holding an abstract description of an opera ...

  4. Android学习之Intent传递数据

    Intent在Activity中的作用主要是有两个: 1.启动目标Activity 2.传递数据 Intent在传递数据时分两种情况:向下一个Activity传递数据和从下一个Activity返回数据 ...

  5. Android学习之Intent使用

    1.使用显示Intent Intent intent = new Intent(FirstActivity.this,SecondActivity.class); startActivity(inte ...

  6. android学习五---OpenCV for android环境搭建

    学习android的目的是想在手机上实现计算机视觉的算法.一般算法的研究都是在Matlab上进行,但是手机平台没有那么多的计算资源,用matlab显然是不太现实的.而OpenCV是基于C++语言编写的 ...

  7. Android学习笔记--Intent

    Intent是android四大组件之间交互的一种重要方式.Intent可以指明当前要执行的动作,也可以指明要传递的数据.Intent可以用来启动活动,启动服务,发送广播. Intent分为两种:1. ...

  8. Android学习笔记Intent二

    上篇随笔大概写了了Intent学习的大纲,这篇通过代码理解下Intent的ComponentName属性的使用 ComponentName,中文意思是组件名称,通过Intent的setsetCompo ...

  9. Android学习五:Content Provider 使用

    1ContentProvider相关知识1.1在安卓应用中,通过文件方式对外共享数据,需要进行文件操作读写数据:采用sharedpreferences共享数据,需要使用sharedpreference ...

随机推荐

  1. Centos7 搭建jupyter远程服务器

    前提:已经安装好jupyter 和Ipython,个人安装anaconda自带jupyter和Ipython 步骤1:生成配置文件: jupyter notebook --generate-confi ...

  2. 计算机名称和IP地址

    获取本地IP地址 得到远程机IP地址与描述 若仅仅是查看IP地址

  3. 四. 引入unittest单元测试框架

    1.   安装 SeleniumIDE(firefox) (1)下载地址:https://addons.mozilla.org/en-US/firefox/addon/selenium-ide/ (2 ...

  4. asp.net mvc HtmlHelperExt EnumDropDownList

    public static class HtmlHelperExt { public static MvcHtmlString EnumDropDownList<TEnum>(this H ...

  5. 使用java将base64码与图片互转!

    本篇文章主要介绍了java 后台将base64字符串保存为图片的方法,现在分享给大家,也给大家做个参考. import java.io.FileInputStream; import java.io. ...

  6. mysql碰到的问题总结

    1.问题描述: 连接数据库出现大约10s延迟后才能连接,排除网络问题 解决方案: 通过抓包工具tcpdump抓包分析mysql在连接开始有近10s的空白请求,问题原因就在这 ,不知道在执行什么请求,后 ...

  7. linux 第十天学习

    一.RAID 1.常见RAID (RAID 0.RAID1.RAID5.RAID10) 2.RAID 10 阵列添加 2.1.添加硬盘 2.2.查看系统加载 2.3.mdadm 命令添加RAID阵列 ...

  8. RAID磁盘阵列的原理

    RAID概念 磁盘阵列(Redundant Arrays of Independent Disks,RAID),有“独立磁盘构成的具有冗余能力的阵列”之意.磁盘阵列是由很多价格较便宜的磁盘,以硬件(R ...

  9. 多用户OFDM系统资源分配研究

    首先,OFDMA 是什么? OFDM 技术的基本原理是将无线信道划分为若干互相正交的子信道,把高速串行数据流转化为低速并行子数据流,低速并行子数据流在子信道上独立传输. OFDMA 是LTE的下行多址 ...

  10. [Doctrine Migrations] 数据库迁移组件的深入解析二:自定义集成

    自定义命令脚本 目录结构 目前的项目结构是这样的(参照代码库): 其中,db/migrations文件夹是迁移类文件夹,config/db.php是我们项目原有的db配置,migrations.php ...