Intent是一个消息传递类,同时能够启动一些组件android
做用:浏览器
1启动一个activity组件。安全
经过Context类的 startActivity()/ startActivity ()方法启动activity组件.
app
2启动一个service组件框架
经过Context类的startService()
方法启动此组件,只能执行一次性操做(例以下载文件)。ide
经过Context类的 bindService()方法ui
3发送一条广播spa
经过Context类的sendBroadcast()
, sendOrderedBroadcast()
, or sendStickyBroadcast()给别的组件发送消息。
翻译
Intent类型:3d
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。