一、多个Activity之间的关系
两个Activity,当想要从第一个Activity跳转到另一个Activity时,通常是在第一个Activity中点下按钮或着其他操作,此时需要调用第一个Activity的startActivity(Intent),跳到哪个Activity以及Activity具体要做什么都是由Intent对象决定的。
二、Intent的基本作用
一个Intent对象可绑定一组信息:接受Intent的组件需要的信息,比如需要调用系统照相机Activity,要告知它照片存放的路径;Android系统需要的信息,比如哪个种类的组件可以处理这个Intent,再比如,告知如何启动Activity。
Intent对象主要包含以下内容:
1、Component name(组件名称,可处理这个Intent的组件名称。组件名称是可选的,如果填写,Intent对象会发送给指定组件名称的组件,否则,也可以通过其他Intent信息定位到适合的组件。组件名称是个ComponmentName类型的对象,该对象又包括:目标组件完整的类名,比如:com.example.project.app.FreneticActivity)
2、Action(命名动作的字符串,用于执行动作,或者,在广播的情况下,表示发生的或者要报告的动作。Intent类定义了一组action常量,见API的Intent.ACTION_*。这些是Intent类预制的一些通用action,还有一些action定义在Android的其他API中。用户可以定义自己的action字符串常量,用于激活自己的应用组件。这需要把应用的包名作为该字符串的前缀,比如:com.example.project.SHOW_COLOR。action名称很像java调用的方法名,下面提到的Data和Extras类似参数和返回值。)
3、Data(起到表示数据和数据MIME类型的作用。不同的action是和不同的data类型配套的。比如,action是ACTION_EDIT,那么data要包含要编辑的文档URI。如果action是ACTION_CALL,data可能是tel:前缀后面跟电话号码,在比如action是ACTION_VIEW,data是http:开头的URI,则应该是显示或者下载该uri的内容。在匹配 intent到能处理该组件的过程中,data(MIME类型)类型是很重要的。比如,一个组件是可以显示图片数据的而不能播放声音文件。很多情况下,data类型可在URI中找到,比如content:开头的URI,表明数据在设备上,而且有content provider控制。但是有些类型只能显式的设置。setData()方法只能设置data的uri,setType()可设置MIME类型,setDataAndType()即可设置URI也可设置MIME类型。)
4、Category (包含处理intent组件种类的额外信息。对一个Intent可以设置任意多个category描述,和action类似,Intent类预制了一些category常量,Intent.CATEGORY_*。)
5、Extras(可以看作一个Map,通过键值对,可为处理Intent组件提供一些附加的信息。可通过put..()和get..()存取信息。也可以获取Bundle对象,然后通过putExtras()和getExtras()方法存取。)
6、Flags(用于多种情况,在intent增加flug,比如可以指示Android如何启动一个activity,比如是否属于或者不属于当前task,以及,处理完毕后activity的归属。这些flag都定义在Intent类的常量中。)
三、在一个Activity当中启动另一个Activity的方法
a) 在第一个Activity中添加监听器setOnClickListener(),具体的监听方法实现OnClickListener接口,在此方法中为Intent赋值后,startActivity(intent)。
b) Intent.setClass(从哪个对象.this,跳转到哪个对象.class);
myButton.setOnClickListener(new MyButtonListener());
class MyButtonListener implements OnClickListener{
public void onClick(View v) {
//生成一个Intent对象
//Intent intent = new Intent();
//intent.putExtra("msg", "testIntent");
//intent.setClass(Activity02.this, Activity02_other.class);
//Activity02.this.startActivity(intent);
Uri uri = Uri.parse("smsto://0800000123");
Intent intent = new Intent(Intent.ACTION_SENDTO,uri);
intent.putExtra("sms_body", "The SMS Text");
startActivity(intent);
}
}
四、使用Intent在Activity之间传递数据的基本方法
a) 、两个Activity之间通过Intent对象传值:intent.setClass(Activity1.this,OtherActivity.class);键值对的传递:intent.putExtra(“键”,”值”);
b) 、另一程序中取值:Intent intent = getIntent();String value = intent.getExtra(“键”);
c)、不在同一个应用程序中的Activity也可以传递值(发送短信)
Uri uri = Uri.parse(“smsto://0800000123”);
Intent intent = new Intent(Intent.ACTION_SENDTO,uri);
Intent.putExtra(“sms_body”,”The SMS Text”);
startActivity(intent);