Android学习笔记九之Intent意图
Intent简介
前面我们介绍完Android系统的四大组件:Activity、Service、ContentProvider、BroadCastReceiver,现在,我们来介绍他们之间的联系枢纽————Intent
Intent,意思是“意图”,Intent是android系统提供的用于应用之间或应用内部Activity、Service、BroadCastReceiver之间进行交互的一种机制。Intent在程序运行时连接不同的组件,我们可以通过Intent向Android系统发出请求,Android系统会根据请求选择合适的组件进行响应。(ContentProvider本身就是一种通信机制,不需要通过Intent通信)
如果AActivity想要向BActivity或者Android系统的其他组件传递参数,或者启动其他组件,不需要直接联系,通过Intent作为桥梁,简单的说就是,用Intent来作为中介联系其他组件。
例如可以通过下面这几种方法传递Intent实现启动Activity、启动Service或者绑定Service,发送广播
- 启动Activity:Context.startActivity()或者调用Activity.startActivityForResult()
- 启动Service或者绑定Service:Context.startService(),调用Context.bindService()来绑定一个service对象
-
发送广播:Context.sendBroadcast(),Context.sendOrderedBroadcast(),或者Context.sendStickyBroadcast()
Intent有两种:显式Intent和隐式Intent。显式Intent通过具体的组件名去启动组件,一次只能启动一个组件;隐式Intent不指定具体的组件名,而是指定Intent的Action、category等信息,交给Android系统去分析这个Intent,并帮我们选择合适的组件去启动,当有多个组件符合的时候,显示所有分组件给我们选择。
Intent的七大属性
Intent由以下各个组成部分:
- ComponentName(组件):目的组件
- action(动作):用来表现意图的行动
- category(类别):用来表现动作的类别
- data(数据):表示与动作要操纵的数据
- type(数据类型):对于data范例的描写
- extras(扩展信息):扩展信息
- Flags(标志位):期望这个意图的运行模式
下面分别介绍各个属性:
1、ComponentName属性
ComponentName明确指定目标组件的名称,属于显式Intent
btn_component = (Button) findViewById(R.id.btn_component);
btn_component.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
Intent intent = new Intent();
ComponentName componentName = new ComponentName(MainActivity.this, ComponentActivity.class);
intent.setComponent(componentName);
startActivity(intent);
}
});
或者可以这样写:
btn_component = (Button) findViewById(R.id.btn_component);
btn_component.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
Intent intent = new Intent();
// ComponentName componentName = new ComponentName(MainActivity.this, ComponentActivity.class);
// intent.setComponent(componentName);
intent.setClass(MainActivity.this, ComponentActivity.class);
startActivity(intent);
}
});
还可以这样写:这是最常用的写法
btn_component = (Button) findViewById(R.id.btn_component);
btn_component.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
Intent intent = new Intent(MainActivity.this,ComponentActivity.class);
// ComponentName componentName = new ComponentName(MainActivity.this, ComponentActivity.class);
// intent.setComponent(componentName);
// intent.setClass(MainActivity.this, ComponentActivity.class);
startActivity(intent);
}
});
2、action属性
action是用户定义的一个字符串,用于描述Android系统的应用组件。Intent不直接指明这个组件,交给Android系统去根据Intent-Filter做筛选,选择符合的组件去启动。例如下面的例子:
Activity代码:
btn_action = (Button) findViewById(R.id.btn_action);
btn_action.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
Intent intent = new Intent();
intent.setAction("com.example.ActionActivity");