Intent 和 Intent 过滤器

基本用途

  1. 启动Activity
  2. 启动Service
  3. 传递广播

Intent类型

  • 显式Intent:按照名称指定要启动的组件。
  • 隐式Intent:不会指定特定的组件,而是声明要执行的操作,从而允许其他应用中的组件来处理它。

创建显式Intent启动Activity或服务时,系统将立即启动Intent对象中指定的应用组件。

创建隐式Intent时,Android系统将通过Intent的内容与设备上其他的应用在清单文件中声明的Intent过滤器进行比较,从而找到要启动的组件。如果Intent与Intent过滤器匹配,系统将启动该组件,并向其传递Intent对象。如果有多个Intent过滤器兼容,则系统会显示对话框,供用户进行选择要使用的应用。
隐式Intent
图 1. 隐式 Intent 如何通过系统传递以启动其他 Activity 的图解:[1] Activity A 创建包含操作描述的 Intent,并将其传递给 startActivity()。[2] Android 系统搜索所有应用中与 Intent 匹配的 Intent 过滤器。 找到匹配项之后,[3] 该系统通过调用匹配 Activity(Activity B)的 onCreate() 方法并将其传递给 Intent,以此启动匹配 Activity。

构建Intent

1. 组件名称

如果要是使用显式Intent,则必须指定组建的名称,否则就是隐式Intent。
启动服务,必须使用显式Intent。

2. 操作

指定要执行的通用操作(例如,“查看”或“选取”)的字符串。
可以使用系统的标准Action,也可以自定义。
隐式Intent必须指定Action。

3. 数据

引用待操作数据和该数据 MIME 类型的 URI(Uri 对象)。
要仅设置数据 URI,请调用 setData()。 要仅设置 MIME 类型,请调用 setType()。如有必要,可以使用 setDataAndType() 同时显式设置二者。

4. 类别

一个包含应处理 Intent 组件类型的附加信息的字符串。 
以上列出的这些属性(组件名称、操作、数据和类别)表示 Intent 的既定特征。 
通过读取这些属性,Android 系统能够解析应当启动哪个应用组件。
如需Activity 接收隐式 Intent,则必须将 "android.intent.category.DEFAULT" 的类别包括在其 Intent 过滤器中

5. Extra

携带完成请求操作所需的附加信息的键值对。

6. 标志

Intent 类中定义的、充当 Intent 元数据的标志。 
标志可以指示 Android 系统如何启动 Activity,以及启动之后如何处理。

可以传递的数据类型

通过查询Intent/Bundle的API文档,我们可以获知,Intent/Bundle支持传递基本类型的数据和基本类型的数组数据,以及String/CharSequence类型的数据和String/CharSequence类型的数组数据。而对于其它类型的数据貌似无能为力,其实不然,我们可以在Intent/Bundle的API中看到Intent/Bundle还可以传递Parcelable(包裹化,邮包)和Serializable(序列化)类型的数据,以及它们的数组/列表数据。

所以要让非基本类型和非String/CharSequence类型的数据通过Intent/Bundle来进行传输,我们就需要在数据类型中实现Parcelable接口或是Serializable接口。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值