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数据typeMIME 类型data属性通常用于给Action属性提供操作的数据,可以是一个URI对象,URI 的格式形如scheme://host:port/pathtype属性通常用于说明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,逐一匹配出满足属性的组件当不止一个满足时,会弹出一个让我们选择启动哪个的对话框