Intent有两个作用:激活组件和附带数据
激活另一个activity的方法
显示意图:
1. Intent intent = new Intent();
intent.setClass(this, OtherActivity.class);//设置要激活的组件
startActivity(intent);
2. Intent intent = new Intent();
intent.setClassName(this, "com.example.activity.OtherActivity");//通过反射机制直接得到,包+activity.
startActivity(intent);
3.
Intent intent = new Intent();
intent.setComponent(new ComponentName(this, OtherActivity.class));
//设置组件
startActivity(intent);
4.Intent intent = new Intent(this,
OtherActivity.class
);
startActivity(intent);
5. /**
* 跨应用激活activity,其他应用的包,包加应用的全称,需要其他应用给出权限
* intent.setClassName("com.example.activity", "com.example.activity.OtherActivity");
*/
如果不是action.Main,则需要主动申明Android:exported="true",允许外部访问
附带数据
在mainActivity中
1. Intent intent = new Intent();
intent.setClass(this, OtherActivity.class);
intent.putExtra("name", "姓名");
intent.putExtra("age",5);
startActivity(intent);
在otherActivity中 提取数据
Intent intent = getIntent();
String name = intent.getStringExtra("name");
int age = intent.getIntExtra("age", 0);//0是缺省值
2.bundle对象存放数据
Intent intent = new Intent();
intent.setClass(this, OtherActivity.class);
// 批量添加
Bundle budle = new Bundle();
budle.putString("name", "姓名");
budle.putInt("age", 5);
intent.putExtras(budle);
startActivity(intent);
otherActivity不用改,也可以采用另一种做法
Bundle bundle = intent.getExtras();
String name=bundle.getString("name");
int age =bundle.getInt("age");
需要otherActivity返回结果给Mainactivity
这种需求需要我们改变打开的方式
把startActivity(intent)改成
startActivityForResult(intent, 200);//200是请求码,用于区分哪部分调用
再重写
onActivityResult方法
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
String result = data.getStringExtra("result");
Toast.makeText(getApplicationContext(),result, 1).show();
}
我们可以在关闭otherActivity时返回结果,也可以定义一个按钮关闭otherActivity返回参数
public void closeActiviity(){
Intent data = new Intent();
data.putExtra("result", "xxxdja");
setResult(30, data);//设置返回数据,30是返回码
this.finish();//关闭当前activity
}