一个Intent对象包含一组信息:
Component name 指的是所要启动的Activity名字,通常为XXX.class 也有可能写成XXX.this
Action 动作,指的是要求要启动的Activity去做某事,也可以通过action来找到Activity。
Data 动作需要的数据
category 被执行动作的附加信息
Extras intent所传递的数据
intent用法(同一个应用中):
无参数的Activity跳转
Intent intent = new Intent(Activity1.this, Activity2.class);
startActivity(intent);
带参数的Activity跳转
Intent intent = new Intent(Activity1.this, Activity2.class);
Bundle bundle=new Bundle();
bundle.putString("name", "This is from Activity1!");
intent.putExtras(bundle);
startActivity(intent);
获得数据
Bundle bundle=getIntent().getExtras();
String name=bundle.getString("name");
带返回结果的Activity跳转Activity1
Intent intent = new Intent(Activity1.this, Activity2.class);
Bundle bundle=new Bundle();
bundle.putString("name", "This is from Activity1!");
intent.putExtras(bundle); // 上面两行代码相当于intent.putExtra(“test”, "AA”);
startActivityForResult(intent,1); //这里Activity跳转是使用startActivityForResult,,还有一个参数被称为请求码,为常量,这里为了方便设为1
Activity2
Intent intent=getIntent();
Bundle bundle=new Bundle();
bundle.putString("name", "This is from Activity2!");
intent.putExtras(bundle);
setResult(2, intent);//这里需要设置一下返回内容,第一个参数被称为返回码,也是一个常量,同样方便起见设为2
重写Activity1中方法onActivityResult
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
// TODO Auto-generated method stub
super.onActivityResult(requestCode, resultCode, data);
if (requestCode==1){ //首先要确保请求码正确,如果请求码错误,则不会判断返回码
if(resultCode==-1)
setTitle("cancle");
else if (resultCode==2) { //判断返回码是否正确,并提示
String temp=null;
Bundle bundle=data.getExtras();
if(bundle!=null) temp=bundle.getString("name");
setTitle(temp);
}
}
}
intent用法(不用应用中,这里的不同应用多用于调用系统应用):
Uri uri = Uri.parse("tel:0800000123");
Intent intent = new Intent(Intent.ACTION_DIAL, uri);
startActivity(intent);
这里会用到通过动作去调用其他应用中的Activity,在AndroidManifest.xml中有一个叫intent-Filter的标签,是用来筛选intent,而筛选intent则是靠动作(action)以及category实现的。
在Activity中可以用语句
intent.setAction( "Intent.ACTION_DIAL");
intent.addCategory(Intent.CATEGORY_DEFAULT);
来设置action和category。这里需要注意的一点是每一个通过 startActivity() 方法发出的隐式 Intent 都至少有一个 category,就是 "android.intent.category.DEFAULT",所以在AndroidManifest.xml文件中必须要有"android.intent.category.DEFAULT",而在Activity中,intent.addCategory(Intent.CATEGORY_DEFAULT);可以不写,写了也没什么用。一个 Intent 可以有多个 category,但至少会有一个,也是默认的一个 category。只有 Intent 的所有 category 都匹配上,Activity 才会接收这个Intent。
显式意图:调用Intent.setComponent()或Intent.setClass()方法明确指定了组件名得Intent为显式意图,显式意图明确指定了Intent应该传递给那个组件。
隐式意图:没有明确指定组件名得Intent为隐式意图。android系统会根据隐式意图中设置的动作(action)、类别(category)、数据(URI和数据类型)找到最合适的组件来
处理这个意图。