Intent机制是来协助应用之间的交互和通讯,Intent负责对应用中一次操作的动作、动作涉及的数据、附加数据进行描述。
Intent的用途
启动Activity和Service
在Android系统上发布广播消息
广播消息可以是接收到特定数据或消息,也可以是手机的信号变化或电池的电量过低等信息。
Intent 是一个将要执行的动作的抽象的描述,一般来说是作为参数来使用,由Intent来协助完成android各个组件之间的通讯。比如说调用startActivity()来启动一个activity,或者由broadcaseIntent()来传递给所有感兴趣的BroadcaseReceiver, 再或者由startService()/bindservice()来启动一个后台的service.所以可以看出来,intent主要是用来启动其他的activity 或者service,所以可以将intent理解成activity之间的粘合剂。
一、Intent实现无参数的Activity跳转
显示启动
1.创建一个Intent,指定当前的应用程序上下文以及要启动的Activity
Intent intent=new Intent(MainActivity.this,SecondActivity.class);
2.把创建好的这个Intent作为参数传递给startActivity()方法
startActivity(intent);
注意:因为使用了多个Activity,因此需要在AndroidManifest.xml文件中注册这两个Activity。注册Activity应使用<activity>标签,嵌套在<application>标签内部。
2.传递参数
Bundle类是一个key-value对,两个activity之间的通讯可以通过bundle类来实现。
在设置传递的Activity中的主要代码
Intent intent = new Intent(MainActivity.this, SecondActivity.class);
Bundle bundle = new Bundle(); //新建一个Bundle对象
bundle.putString("name", "传递的参数"); //设置传递的数据
intent.putExtras(bundle); //将bundle加入到intent对象中
startActivity(intent);
在接受数据的Activity中的代码
Bundle bundle=getIntent().getExtras(); //新建一个bundle来接受数据对象
String data=bundle.getString("name"); //设置一个对象来接受数据内容
setTitle(data); //在标题栏显示接受的数据内容
没有传参数时的效果图
传递参数后的效果图
3.返回参数
在第二个Activity中的主要代码
Intent intent=new Intent();
Bundle bundle2=new Bundle();
bundle2.putString("back", "返回的参数");
intent.putExtras(bundle2);
setResult(RESULTCODE,intent);
finish(); //结束SecondActivity并返回值
在第一个Activity主要代码
Intent intent = new Intent(MainActivity.this, SecondActivity.class);
Bundle bundle = new Bundle();
bundle.putString("name", "传递的参数");
intent.putExtras(bundle);
startActivityForResult(intent, REQUESTCODE); //这是通过intent启动有返回值的Activity
当子Activity关闭后,父Activity会调用onActivityResult()函数,用了获取子Activity的返回值。
如果需要在父Activity中处理子Activity的返回值,则重载此函数即可。如下所示:
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
if(requestCode==REQUESTCODE){
if(resultCode==SecondActivity.RESULTCODE){
Bundle bd=data.getExtras();
String st=bd.getString("back");
Toast.makeText(MainActivity.this, st,Toast.LENGTH_SHORT ).show();
}
}
}
注释:REQUESTCODE是一个自定义常量,用来区分MainActivity中是哪一个Button调用SecondActiviy。
RESULTCODE也是一个自定义常量,用来区分SecondActivity中是哪一个Button返回的结果。
startActivityForResult(Intent, requestCode)函数,参数Intent用于决定启动哪个Activity,参数requestCode是请求码。因为所有子Activity返回时,父Activity都调用相同的处理函数,因此父Activity使用requestCode来确定哪一个Button调用SecondActivity。
效果图: