首页 > 代码库 > 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