Intent过滤器及构建Intent|青训营笔记

122 阅读3分钟

这是我参与「第四届青训营 」笔记创作活动的第5天。

1.Intent过滤器

Intent过滤器是应用清单文件中的一个表达式,用于指定该组件要接收的Intent类。举例,通过为Activity声明Intent过滤器,我们可以使其他应用能够直接使用某一特定类型的Intent启动Activity。同样,如果我们没有为Activity声明任何Intent过滤器,则Activity只能通过显式Intent启动。

2.构建Intent

Intent对象携带Android系统用来确定要启动哪个组件的信息,以及收件人组件为了正确执行操作而使用的信息。 Intent中包含的信息有以下:

  • 组件名称 组件名称是指要启动的组件名称。这个是可选项,同时也是构建显示Intent应当仅传递给由组件名称定义的应用组件。如果没有组件名称,则Intent则为隐式,且系统将根据其他Intent信息决定哪个组件应当接受Intent。如果需要在应用中启动特定的组件,则应指定该组件的名称。

  • 操作 指定要执行的通用操作的字符串。对于广播Intent,这是指已经发生并且正在报告的操作。操作会在很大程度上决定其余Intent的构成,特别是数据和extra中包含的内容。我们可以指定自己的操作,供Intent在应用内使用。我们可以使用setAction()或Intent构造函数为Intent指定操作。

  • 数据 数据是引用待操作数据和/或该数据MIME类型的URI。提供的数据类型通常由Intent的操作决定。创建Intent时,除了指定的URI以外,指定数据类型也是非常重要的。举例的话,能够显示图像的Activity可能无法播放音频文件,即便URI格式相似也是如此。不过,有时候MIME类型可以从URI中推断得到,特别是数据是content:URI时尤其如此。如果要只设置数据URI,则调用setData(),如果只设置MIME类型,则调用setType()。但如果有必要的话,我们可以使用setDataAndType()同时显式设置二者。

  • 类别 一个包含应处理Intent组件类型的附加信息的字符串。我们可以将任意数量的类别描述放入一个Intent中,但大多数Intent均不需要类别。

  • Extra 携带完成请求操作所需要的附加信息的键值对,就跟某些操作使用特定类型的数据URI一样,有些操作也是用特定的extra。 我们可以使用各种putExtra()方法添加extra数据,每种方法都接受两个参数:键名和值。我们还可以创建一个包含所有extra数据的Bundle对象,然后使用putExtras()将Bundle插入Intent中。

  • 标志

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