这是我参与「第四届青训营 」笔记创作活动的第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,以及启动之后如何处理。