Android Intent 意图
|:---|
|startActivity(Intent)
startActivityForResult(Intent)| 启动一个 Activity
|startService(Intent)
bindService(Intent) | 启动一个 Service
|sendBroadcast()| 发送广播到指定 BroadcastReceiver
Intent 的七个属性
属性 | 说明 |
---|---|
componentName | 组件名称 |
action | 动作 |
category | 类别 |
data | 数据 |
extras | 额外信息 |
flags | 标记 |
-
componentName
目标组件的名称,由组件所在的应用程序配置文件中设置的包名+组件的全限定类名组成,这是显式的
Intent
,能够激发的组件只有一个有
setClass()
,setClassName()
和setComponent()
方法设置 -
Action 动作
字符串,代表
Intent
要完成的一个抽象 “动作”,比如发信息的权限,而具体由哪个组件来完成,Intent
并不负责 -
category
类别字符串, 属性
category
用于为action
属性提供额外的附加类别信息,两者通常一起使用一个
Intent
对象只能设置一个Action
,但可以有多个category
-
data
数据type
MIME 类型data
属性通常用于给Action
属性提供操作的数据,可以是一个URI
对象,URI 的格式形如scheme://host:port/path
type
属性通常用于说明data
属性所指定的 URI 对应的MIME
类型,比如能够显示图片数据的组件不应该用来播放音频,可以是自定义MIME
类型,只要格式符合abc/xyz
-
extras
额外信息通常用于多个
Action
之间的数据交换extra
属性是一个Bundle
对象,通过键值进行数据存储 -
flags
标记不同来源的标记,经常用于标记 Android 如何启动
Activity
以及以后如何对待flags
常量都定义在Intent
类中,比如FLAG_ACTIVITY_SINGLE_TOP
相当于Activity
加载模式中的singleTop
模式
显式 Intent 与隐式 Intent
既然 Intent
能打开我们想要的东西,那么打开的时候就有区别了,比如指定要打开的哪个,直接打开就好,还有就是打开一组,就会弹出一个列表让我们选择打开哪个了
-
显式Intent
通过组件名指定启动的目标组件,比如
startActivity(new Intent(A.this,B.class));
每次启动的组件只有一个
-
隐式Intent
不指定组件名,而指定 Intent 的
action
,data
或category
当我们启动组件时,会去匹配
AndroidManifest.xml
相关组件的 Intent-filter,逐一匹配出满足属性的组件当不止一个满足时,会弹出一个让我们选择启动哪个的对话框