首页 > 代码库 > android API Guides学习--Intent and Intent Filters

android API Guides学习--Intent and Intent Filters

Intent是一个消息传递类,同时可以启动一些组件

作用:

1启动一个activity组件。

通过Context类的 startActivity()/ startActivity ()方法启动activity组件.

2启动一个service组件

通过Context类的startService()方法启动此组件,只能执行一次性操作(例如下载文件)。

通过Context类的 bindService()方法

3发送一条广播

通过Context类的sendBroadcast(), sendOrderedBroadcast(), or sendStickyBroadcast()给别的组件发送消息。

Intent类型:

1显式intent:

当你知道你想要启动的组件时,指定将启动组件的类名(需创建一个具体的组件)。例如后台下载文件,启动一个activity响应用户行为。

当你一使用一个显示intent去启动组件时,就在intent类中指定了详细的intent属性(除了Component name外,其他属性可不选)。

一般来说,显式intent用来启动特殊的activity与service。

2隐式intent:

没有明确指定一个组件名称。一般用于在app中调用另一个app的组件。

当你使用隐式intent时,android系统去查找合适的组件来启动。如果intent匹配intent filter,则启动组件并把intent传递给intent类,如果有多个intent filter符合,则弹出对话框让用户选择。

通过resolveActivity()方法可判断是否查找到合适的组件。

intent filter是manifest文件中的语句,他描述了组件想要接收的各种类型的intent。

为了确保你的app是安全的,使用显式intent启动一个service时不要给service声明intent filter。使用隐式intent启动service是有安全隐患的。因为你不能确定哪个service将响应intent,用户也看不到是哪个service在启动。

创建一个intent类

intent类携带的主要信息:

Component name:

将要启动的组件名。

这个属性是可选择的。

但如果你想创建一个明确的组件,那么你要确定组件名。(显式intent)

如果你不确定组件名,系统以intent其他属性决定启动哪个组件.(隐式intent)

当启动service组件时,为了确保你的app是安全的,最好要有明确的组件名。

你可以通过intent构造方法,或者setComponent(), setClass(), setClassName()方法来确定将要启动的组件名。

Action:

通过一个字符串确定将要执行的动作。例如查看或选择。

你可以在你的app中定义一个action属性的字符串供你使用,但是你应该优先使用intent类或其他框架类中已定义好的action属性字符串。

ACTION_VIEW:当你有些信息需要给用户显示时,例如在map app中显示地址

ACTION_SEND:用户想要通过另一个app分享数据。

你可以通过intent类中setAction()方法或intent构造方法来设置action属性。

如果想要定义一个action属性字符串的话,不要忘了定义时把包名作为字符串的前缀。

eg:

 1 static final String ACTION_TIMETRAVEL = "com.example.action.TIMETRAVEL"; 

Data:

URI类引用的数据行使MIME类型数据的职能。提供的数据的类型一般由intent的action决定。

除了URI之外,在创建intent类非常重要事情是指定数据类型(MIME type).

设置URI类型,用setData()方法,设置MIME类型,用setType()方法。两种都设置用setDataAndType()方法.(intent类)

Category:

给intent以字符串的形式添加额外信息。

大部分intent不需要添加category。

CATEGORY_LAUNCHER:activity是一个初始的任务activity并且他被列在应用程序管理器上。

CATEGORY_BROWSABLE:目标activity允许浏览器通过引用链接启动他来显示数据

通过addCategory()方法添加Category属性

Extras:

通过键值对的形式保存额外的信息来完成要求的功能,就好像一些动作和特定的数据URI对应,一些动作和特定的extras对应。

通过putExtra()方法添加extras.

自定义Extra字符串。

 1 static final String EXTRA_GIGAWATTS = "com.example.EXTRA_GIGAWATTS"; 

Flags:

定义了如何启动activity以及如何对待他。

 

翻译自android 官网API Guide。

 

android API Guides学习--Intent and Intent Filters