一个Android程序通常有多个组件构成。如果要从一个Activity切换到另一个,必须用Intent来激活。实际上,Activity,Service和Broadcast Receiver这三种核心组件都需要使用Intent来激活。
- Intent对象可以传递给startActivity() 或startActivityForResult()方法来启动一个activity,或让一个已经存在的Activity去做其他任务。Intent也可以作为Activity.setResult() 的参数,返回给调用了startActivityForResult()的Activity。
- Intent对象可以传递给Context.startService()方法来初始化一个service或者向一个已经存在的service传递新的指令。类似的,传递给Context.bindService()方法可以在调用所在的组件和目标service之间建立一种连接。它可以有选择的初始化没有运行的服务
- Intent对象可以传递给Context.sendBroadcast(),Context.sendOrderedBroadcast(),或 Context.sendStickyBroadcast()等广播方法,使其发送给所有感兴趣的Broadcast Receiver
在Intent对象中应该包含如下信息:
- Component name(组件名称):组件名称通过setComponent(),setClass(),setClassName()设置,通过getComponent()获取。需要注意的是Componentname是一个可选项,如果被设置,那么Intent对象就显式指定了要转向的组件,如果没有被设置,则Intent对象需要根据其他信息进行筛选查找。
- Action(动作):Action是指Intent要完成的动作,是一个字符串常量。Intent类中定义了一系列动作常量,包括Activity和Broadcast两类。在Activity中标准动作最常用的是ACTION_MAIN(初始Activity,没有数据)和ACTION_EDIT(将数据显示给用户用于编辑),使用startActivity()启动。在标准广播动作中,通常使用registerRecevier()或者在配置文件中的<receiver>标签。Intent对象中的动作使用setAction()设置,使用getAction()读取。
- Data(数据):Data表示操作数据的URI和MIME类型,不同的动作有不同的数据规格。数据类型也可以显式指定,比如setData()方法指定数据为URI,setType() 指定为MIME类型,setDataAndType() 可以同时设置URI和MIME类型。读取的时候URI用getData(),MIME用getType()。
- Category(种类):Category是一个字符串,其中包含了能够处理这个Intent对象的组件类型的附加信息。addCategory()将种类添加到Intent中,removeCategory()将种类从Intent中移除上次添加的种类和getCategories()获取所有种类。
- Extras(额外):传递给Intent的额外数据,以Bundle的形式定义,就是一些键值对。Intent对象有一系列的putXXX()函数用于放入各种数据类型,相应的也有一系列的getXXX()函数用于读取数据。实际上,数据可以被作为一个Bundle对象被使用,利用 putExtras() 和 getExtras() 方法。
- Flags(标记):用来指定Android系统如何启动activity,还有启动了activity后如何对待它。所有这些都定义在Intent类中。所有标记都是正整数
Intent使用实例:
A 无参数Activity跳转
Intent intent = new Intent(MainActivity.this,DetailActivity.class);
startActivity(intent);
B 向下一个Activity传递数据
方法一:
MainActivity: Intent intent = newIntent(MainActivity.this, RegisterActivity.class);
Bundlebundle = new Bundle();
bundle.putCharSequence("user",user);
intent.putExtras(bundle);
startActivity(intent);
RegisterActivity: Intent intent = getIntent();
Bundle bundle = intent.getExtras();
TextViewuser = (TextView)findViewById(R.id.user);
user.setText("用户名:"+bundle.getString("user"));
方法二:
MainActivity: Intent intent = newIntent();
Intent.setAction(Intent.ACTION_VIEW);
startActivity(intent);
RegisterActivity: 就一个自然生成的布局文件。
AndroidManifest.xml在传递过去的SecondActivity中要说明
<actionandroid:name=”android:intent:action.VIEW”/>
C 回调函数
MainActivity:
final int CODE = 0x717;
startActivityForResult(intent,CODE);
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
// TODOAuto-generated method stub
super.onActivityResult(requestCode,resultCode, data);
if(requestCode == CODE && resultCode == CODE ){
}
}
RegisterActivity:
Button bn =(Button)findViewById(R.id.back);
bn.setOnClickListener(newOnClickListener(){
@Override
public voidonClick(View v) {
// TODOAuto-generated method stub
setResult(0x717,intent);
finish();
}
});
参考:
http://www.cnblogs.com/mengdd/archive/2013/03/18/2965839.html