Android四核心activity,service,broadcast receiver和content provider。除了content provider之外,彼此的通信都要使用Intent对象来进行。
Intent对象描述了要执行的结果是什么,基本内容可以氛围:componentName组件名称,action动作名称,data数据,category类别,extra返家数据和flag标志位6个部分。
所谓的显示intent就是我们常用的Intent.setclass(xxx.this,xxx.class),也就是指定componentName组件名称。
相对的隐式调用就是没有明确指出目标组件名称的情况。
指定action的动作名称
Uri uri = Uri.parse("http://www.baidu.com");
Intent intent = new Intent(Intent.ACTION_VIEW, uri);
MainActivity.this.startActivity(intent);
传递Extra字符串,使用startActivityForResult
重写方法:
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
if (requestCode == 100) {
Toast.makeText(MainActivity.this, data.getStringExtra("data"), Toast.LENGTH_SHORT).show();
}
super.onActivityResult(requestCode, resultCode, data);
}
启动跳转
findViewById(R.id.button1).setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent intent = new Intent(MainActivity.this, Secend.class);
startActivityForResult(intent, 100);
}
});
Secend.class
findViewById(R.id.secend_bt).setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
String str = "secend activity msg";
Intent intent = new Intent();
intent.putExtra("data", str);
Secend.this.setResult(RESULT_OK, intent);
Secend.this.finish();
}
});
startActivityForResult方法,与startActivity类似。
不同点为:startActivity仅仅跳转目标界面,而startActivityForResult跳转的界面,如果调用了finish(),还会自动跳转回来。