Intent组成元素
一、显示意图
需要指定被开启的类名或路径名,一般用于启动同一应用中的Aactivity
声明方式
//第一种:在构造函数中指定
Intent intent = new Intent(this,Res.class);
//第二种:调用setClass方法
Intent intent = new Intent();
intent.setClass(this,Res.class);
//第三种:调用setComponent方法
Intent intent = new Intent();
ComponentName componentt = new ComponentName(this,Res.class);
intent.setComponent(component);
二、隐式意图
一般用于启动不同应用的Activity。
需要添加intent-filter过滤器,添加标签,指定name的值,通过name值找到Activity。
//通过Uri得到更加详细的信息
Intent intent = new Intent();
intent.setAction(Intent.ACTION_CALL);
Uri uri = Uri.parse("tel:" + 10086);
intent.setData(uri);
startActivity(intent);
三、向下一个Activity传递数据
可通过putExtra方法传递个中类型参数,为方便管理,使用Buindle。把Builder全部打包号只需调用一次putExtras方法,把Builder取出来也只需一次getExtras
//发送数据
Intent intent = new Intent();
intent.setAction(Intent.ACTION_CALL);
Uri uri = Uri.parse("tel:" + 10086);
intent.setData(uri);
Bundle bundle = new Bundle();
bundle.putString("key1","value1");
bundle.putInt("key2",2);
bundle.putChar("key3",'C');
intent.putExtras(bundle);
startActivity(intent);
//接收数据
Intent intent = getIntent();
Bundle bundle = intent.getExtras();
String value1 = bundle.getString("key1");
int value2 = bundle.getInt("key2");
四、向上一个页面返回数据
1、前一个页面打包好请求数据,调用startActivityForResult(Intent,requestCode)
Intent intent = new Intent(this,SMSListActivity.class);
startActivityForResult(intent,0);
2、下一个页面返回前一个页面时,打包应答数据并调用setResult(requestCode,Intent);
String message = smsString[position];
Intent intent = new Intent(SMSListActivity.this,MainActivity.class);
intent.putExtra("message",message);
//把当前界面的数据,返回给开启我的界面
setResult(0,intent);
//关闭当前界面
finish();
3、前一个页面重写onActivityResult方法
protected void onActivityResult(int requestCode, int resultCode, @Nullable Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if (requestCode == 0){
mEtContent.setText(data.getStringExtra("message"));
}else if (requestCode == 1){
mETPhone.setText(data.getStringExtra("phone"));
}
}