Intent
1. Intent简介
An intent is an abstract description of an operation to be performed. It can be used with
startActivity
to launch anActivity
,broadcastIntent
to send it to any interestedBroadcastReceiver
components, andContext.startService(Intent)
orContext.bindService(Intent, ServiceConnection, int)
to communicate with a backgroundService
.
Intent
用以在APP
中Activity
,Service
,Broadcast
间的通信,包含了一系列抽象的操作描述,具有几大功能——启动Activity
、启动Service
、发送Broadcast
。
2. Intent 属性
主要属性如下图:
-
ComponentName
要处理的应用组件的名称,为
null
时系统自动找一个。
可以通过:public Intent setComponent (ComponentName component)
方法设置Intent intent = new Intent(); ComponentName c = new ComponentName("<Activity所在包>", "<Activity含包完整名称>"); intent.setComponentName(c); startActivity(intent);
-
说明要进行的动作及该动作所需的信息,例如拨打电话、发送短信,不同
Action
有不同的Data
,如下图。-
设置
Action
:intent.setAction(<Intent.action>)
-
设置
Data
:intent.setData(<Uri data>)
-
设置完毕后
startActivity(intent)
即可注意,涉及到权限问题,需要先在
mainfest
中注册权限。
-
-
Action
和Category
用以启动其他
Activity
-
设置
Action
:intent.setAction(<Intent.action>)
-
设置
Category
:intent.addCategory (String category)
-
设置完毕后
startActivity(intent)
即可
-
-
Extras
多个Activity数据交换时,在Intent中借助
Bundle
存储数据。- 保存数据:
intent.putExtras(Bundle extras)
,或者putExtra(key, value)
,返回相同Intent
对象,用以链式调用。 - 提取数据:
Bundle getExtras ()
,或者getXXXExtra
(如getDoubleExtra(...)
),返回Bundle
对象
- 保存数据:
-
Flags
指示安卓程序应该如何启动另一个
Activity
,指定Activity
启动后是否在最近启动Activity
列表中(Task
)等等…- 设置
Flags
:intent.setFlag(<intent.FLAG>)
- 设置
3. Intent 种类
分为显示和隐式两种。
3.1 显示Intent
显示的启动一个Activity
Intent intent = new Intent(<ThisActivity>.this, <NextActivity>.class)
3.2 隐式Intent
不指定Activity,而是通过设置Action
、category
,data
属性,让安卓系统找到一个目标Activity。
4. Intent 过滤器
根据Activity的action
、catogory
等属性,对于Intent
进行筛选、过滤,用以隐式Intent
。
-
配置:通过
<intent-filter>
标签在AndroidManiFest.xml
文件中配置
组合使用参考Intent属性