什么是Intent

    Intent是android开发中的重要对象,它作为一个信息承载对象存在。
    我们可以在使用其他一些组件的时候从Intent获取行为响应的准则(即应该做什么东西,如何做)
 
Intent的三种基本使用场景
启动一个Activity:
    通过传递一个Intent对象给startActivity(Intent intent)方法,可以启动一个Activity
 
启动一个服务:
    像启动Activity一样,我们也可以传递一个Intent对象给startService(Intent intent),从而启动一个服务。
 
发送一个广播:
    我们先不管广播是什么东西,现在我们只需要知道向sendBroadcast(Intent intent)方法传递一个Intent对象,就可以发送广播。
    当然,这不是创建广播的全部内容。
 
Intent的类型
intent类型有两种
    显式Intent:需要使用组件的类的全名创建。
               因为我们知道自己创建的类名称,所以一般这个方法在自己的程序内部使用。
显式Intent的创建方法: 
 
//this为应用程序的上下文,MyActivity是自定义类
Intent intent = new Intent(this, MyActivity.class)
 
    隐式Intent:可以在androidManifest注册组件的时候使用intentfilter标签创建。
               只要系统匹配到这个intentfilter,该组件就会被运行。
 
创建隐式Intent的例子(以启动Activity为例):
AndroidManifest文件中有如下Activity的定义
默认情况下,你的隐式intent必须包含 CATEGORY_DEFAULT category
如果没有,系统就找不到你的Activity
建议使用你的应用程序的包名+action名称作为action的字符串
<activity
android:name="com.example.intentdemo.IntentActivity"
android:label="@string/title_activity_intent" >
<intent-filter>
<action android:name="com.example.MYACTION" />
<category android:name="android.intent.category.DEFAULT" />
</intent-filter>
</activity>
在程序中我们可以使用下面的代码启动这个Activity
Intent intent = new Intent("com.example.MYACTION");
startActivity(intent);
 
需要注意的是,当我们需要使用Intent启动一个服务的时候,最好使用显式Intent
因为我们并不知道系统中有多少个使用相同名称定义的服务组件,当启动服务的时候,
我们也不知道到底启动了哪个服务,也无法看到是哪个服务。
从android5.0开始,当我们使用隐式intent传递给bindService()函数的时候,
系统就会抛出异常。
 
Intent里面所包含的信息
既然intent是用来承载信息的,那么它到底可以装载什么信息呢?
1.组件名称:
如,Activity名称,Service名称等。当我们使用显式intent的时候,
我们就要使用这些组件的名称来构造Intent
2.Action(包含在AndroidManifest文件中)
    指定Intent执行什么动作的字符串
    系统已经为我们预先定义了一系列的字符串,我们拿来即可以用。
    具体可以看Intent的官方文档。
    我们也可以定义自己的字符串,只要在<intent-filter>标签里的<action />标签里定义即可
3.Data(包含在AndroidManifest文件中,具体可定义下面的内容)
<data android:scheme="string"
android:host="string"
android:port="string"
android:path="string"
android:pathPattern="string"
android:pathPrefix="string"
android:mimeType="string" />

包括指向你要操作的数据的Uri或者你的组件可处理(接受)的数据的类型

例如你的action指定为ACTION_EDIT,那么你的Data包含的Uri就是你要编辑的文件的Uri(可以理解为文档路径)
 
android:scheme属性:用于指定Uri的类型,如网络类型的http,ContentProvider类型的content
android:scheme="http"
android:scheme="content"
如果scheme没有被设置,那么所有的Uri属性将被忽略
如果host没有被设置,那么所有的port属性和path属性将被忽略
如果你的<intent-filter>设置了数据类型(mimeType),但是没有设置scheme
那么系统假设你的Uri类型是content或者file
 
setDate()方法和setType()方法
    这两个方法用于设置组件的Uri和数据类型(对应AndroidManifest文件中的schema和mimeType)
    但是,当我们需要同时设置Uri和mimeType的时候,我们不能同时使用这两个方法,而是应该使用setDataAndType()方法。
 
4.Category
    我们可以使用系统预定义的分类,也可以定义自己的分类。
    还记得我们使用隐式intent的时候需要设置CATEGORY_DEFAULT分类吗。
 
5.Extras
    顾名思义,即额外的东西,以键值对的方式保存。
    你可以使用Intent来传递你可以想象得到的数据类型,如,int,String,Array等

Intent和Intent Filters的更多相关文章

  1. Android开发-API指南-Intent和Intent过滤器

    Intents and Intent Filters 英文原文:http://developer.android.com/guide/components/intents-filters.html 采 ...

  2. android intent和intent action大全

    1.Intent的用法:(1)用Action跳转1,使用Action跳转,如果有一个程序的AndroidManifest.xml中的某一个 Activity的IntentFilter段中 定义了包含了 ...

  3. intent.addFlags(Intent.FLAG_ACTIVITY_NO_HISTORY);

    ActivityA到ActivityBintent.addFlags(Intent.FLAG_ACTIVITY_NO_HISTORY);//ActivityB不加入后退栈android:noHisto ...

  4. ActivityGroup相关--getLocalActivityManager() 以及intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP)用法

    ActivityGroup简介 1.ActivityGroup的核心就是继承了该类,能够通过getLocalActivityManager()得到一个LocalActivityManager 如,Lo ...

  5. Android菜鸟的成长笔记(9)——Intent与Intent Filter(下)

    原文:[置顶] Android菜鸟的成长笔记(9)——Intent与Intent Filter(下) 接着上一篇的内容,下面我们再来看看Intent的Data与Type属性. 一.Data属性与Typ ...

  6. Android菜鸟的成长笔记(8)——Intent与Intent Filter(上)

    原文:[置顶] Android菜鸟的成长笔记(8)——Intent与Intent Filter(上) Intent代表了Android应用的启动“意图”,Android应用将会根据Intent来启动指 ...

  7. Android——Intent和Intent过滤器

    http://www.cnblogs.com/XP-Lee/p/3613830.html Intent就是一个激活组件的消息对象,用于组件之间的通信.需要注意的是,能被Intent激活通信的组件只有三 ...

  8. Android之旅-Intent与Intent Filter[上]

    Intent代表了Android应用的启动“意图”,Android应用将会根据Intent来启动指定组件,至于到底启动哪个组件,取决于Intent的各个属性. 一.显式的Intent 明确指定了要启动 ...

  9. intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP)用法

    如果已经启动了四个Activity:A,B,C和D.在D Activity里,我们要跳到B Activity,同时希望C finish掉,可以在startActivity(intent)里的inten ...

随机推荐

  1. 二:C语言(分之结构)

    一:if语句 二:while语句 #include <stdio.h> int main() { ; i=; ) //循环条件应该是什么呢? { sum=sum+i; i++ ; //这里 ...

  2. php中的curl使用入门教程和常见用法实例

    摘要: [目录] php中的curl使用入门教程和常见用法实例 一.curl的优势 二.curl的简单使用步骤 三.错误处理 四.获取curl请求的具体信息 五.使用curl发送post请求 六.文件 ...

  3. 图灵机器人(问答机器人)API调用示例

    问答机器人API文档:https://www.juhe.cn/docs/api/id/112 先上图: 说下大致实现的步骤: 1.首先使用了聚合数据的sdk,这样免费使用的数目可以多一些 2.使用gs ...

  4. The Google Test and Development Environment (持续更新)

    最近Google Testing Blog上开始连载The Google Test and Development Environment(Google的测试和开发环境),因为blogspot被墙,我 ...

  5. POJ3187Backward Digit Sums[杨辉三角]

    Backward Digit Sums Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 6350   Accepted: 36 ...

  6. 使用while循环语句和变量输出九九乘法表

    输出的结果如下:

  7. Hash MD5 CRC 知识

    本文旨在科普安全相关的知识,并附一个C#实现的文件管理工具. Hash 安全散列算法(英语:Secure Hash Algorithm,缩写为SHA)是一个密码散列函数家族,是FIPS所认证的五种安全 ...

  8. 什么是 A 轮融资?有 B轮 C轮么?

    融资的顺序是A轮 B轮 C轮这之前还有天使轮,种子轮,首轮在这之后还有vc/pe,ipo等等,只是一些不同时段的融资 Chen Shu 知乎用户.千叶光.angle LI 等人赞同 就是公司的初卖.再 ...

  9. 入门训练 Fibonacci数列

      入门训练 Fibonacci数列   时间限制:1.0s   内存限制:256.0MB 问题描述 Fibonacci数列的递推公式为:Fn=Fn-1+Fn-2,其中F1=F2=1. 当n比较大时, ...

  10. 如何用patch打补丁

    patch -p1 < *.patch -p1代表忽略第一层目录(patch文件中的).