概述
Intent负责对应用中一次操作的动作、动作涉及的数据、附加数据进行描述。Android则根据此Intent的描述,负责找到对应的组件,将Intent传递给调用的组件,并完成组件的调用。
Intent协助完成组件间的通讯。Intent在组件间通讯起着一个媒体中介的作用,专门提供组件调用的相关信息,实现调用者与被调用者之间的解耦。
Intent跳转
Intent跳转分为显示跳转与隐士跳转。
显示跳转
知道一个Activity的名字使其跳转到另一个已知的Activity.
类名调整
Intent I = new Intent(A.this, B.class);
隐士跳转
是一个Activity通过动作进行跳转,没有指定具体的Activity。
自定义Action
new Intent("com.xxxx.android.MyAction”)
系统Action
new Intent(Intent.ACTION_VIEW)
new Intent(Intent ACTION_DIALL)
new Intent(Intent ACTION_CALL)
实例1:调用拨号键盘
</pre></p><p><pre name="code" class="java">public boolean onTouchEvent(MotionEvent event){
if(event.getAction() == MotionEvent.ACTION_DOWN){
Uri uri = Uri.parse("tel:13426377223");
Intent intent = new Intent(Intent.ACTION_DIAL, uri);
startActivity(intent);
}
return true;
}
实例2:直接拨打电话
public boolean onTouchEvent(MotionEvent event){
//判断触摸屏的动作是否被按下
if(event.getAction() == MotionEvent.ACTION_DOWN){
//通过Intent隐士跳转直接拨打电话
Uri uri = Uri.parse("tel:13426377223");
Intent it = new Intent(Intent.ACTION_CALL, uri);
startActivity(it);
}
return true;
}
要在AndroidManifest.xml中加入拨打电话的权限
<uses-permission android:name="android.permission.CALL_PHONE"/>
Intent传递数据
通过Intent传递
通过Intent对象直接调用putExtra(String key, Object value)方法
public boolean onTouchEvent(MotionEvent event){
//判断触摸屏的动作是否被按下
if(event.getAction() == MotionEvent.ACTION_DOWN){
Intent intent = new Intent(); //通过Intent对象
intent.setClass(MainActivity.this, NewActivity.class);
intent.putExtra("name", "wangyan");
intent.putExtra("sex", "Man");
startActivity(intent); //启动与之相匹配的的Activity
}
return true;
}
从Intent取数据
通过Intent对象调取Intent.getXXX()
private String tag = "NewActivity";
TextView t;
Intent intent; //声明Intent对象
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);//这里可以使用setContentView(R.layout.xxx)显示某个视图….
intent = getIntent();//获得intent对象
String name = intent.getStringExtra("name");
String sex = intent.getStringExtra("sex");
Log.d(tag, "name:" + name + "sex:" + sex);
setContentView(R.layout.activity_main); //为当前界面加载布局文件
t = (TextView) findViewById(R.id.action_settings);
}
通过Bundle传递
通过Bundle对象调用putXXX(key, value)方法
public boolean onTouchEvent(MotionEvent event){
//判断触摸屏的动作是否被按下
if(event.getAction() == MotionEvent.ACTION_DOWN){
Intent intent = new Intent(); //通过Intent对象
intent.setClass(MainActivity.this, NewActivity.class);
//构建Bundle对象
Bundle b = new Bundle();
//向b里存放对象
b.putString("name", "Wangyan");
b.putString("sex", "Man");
intent.putExtra("bundle", b);
startActivity(intent); //启动与之相匹配的的Activity
}
return true;
}
获取Bundle
通过Intent对象的getExtras()方法获得Bundle的对象,再通过Bundle对象的getXXX()方法获得数据
private String tag = "NewActivity";
Intent intent; //声明Intent对象
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);//这里可以使用setContentView(R.layout.xxx)显示某个视图….
intent = getIntent();//获得intent对象
<span style="white-space:pre"> </span>Bundle bundle = intent.getBundleExtra("bundle");
String name = bundle.getString("name");
String sex = bundle.getString("sex");
Log.d(tag, "name:" + name + "sex:" + sex);
setContentView(R.layout.activity_main); //为当前界面加载布局文件
}
Android页面之间进行数据回传
描述:页面1跳转到页面2,页面2再返回页面1同时返回数据
页面1相关代码:
Intent intent = new Intent();
intent.setClass(页面1.this, 页面2.class);
Bundle bundle = new Bundle();
intent.putExtras(bundle);//将Bundle添加到Intent,也可以在Bundle中添加相应数据传递给下个页面,例如:bundle.putString("abc", "bbb");
startActivityForResult(intent, 0);// 跳转并要求返回值,0代表请求值(可以随便写)
页面2接收数据相关代码
Intent intent = this.getIntent();
Bundle bundle = intent.getExtras();
bundle.putString("aaa", "back");//添加要返回给页面1的数据
intent.putExtras(bundle);
this.setResult(Activity.RESULT_OK, intent);//返回页面1
this.finish();
页面1接收返回数据:(需要重写onActivityResult)
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if (requestCode == 0 && resultCode == Activity.RESULT_OK) {
Bundle bundle = data.getExtras();
gameView.backString = bundle.getString("aaa");
Toast.makeText(this, backString, Toast.LENGTH_SHORT).show();
}
}