Intent基本含义
Android中提供了Intent机制来协助应用间的交互与通讯,Intent负责对应用中一次操作的动作、动作涉及数据、附加数据进行描述,Android则根据此Intent的描述,负责找到对应的组件,将 Intent传递给调用的组件,并完成组件的调用。Intent不仅可用于应用程序之间,也可用于应用程序内部的Activity/Service之间的交互。因此,Intent在这里起着一个媒体中介的作用,专门提供组件互相调用的相关信息,实现调用者与被调用者之间的解耦。
Intent
就是一个消息对象,用于向其他 应用程序组件(Activity,Service和Broadcast Receiver) 发送 Action 请求。 虽然用 Intent 实现组件间通讯的方式多种多样,但只有三种基本的使用场景:
第一、启动 Activity :
在应用程序中,一个 Activity 代表着一个屏幕窗口。 通过向 startActivity()
传入一个 Intent
,可以启动一个 Activity 实例。 这个 Intent 对需要启动的 Activity 进行了说明,并可附带任何必要的数据。
如果需要在 Activity 结束时从中接收结果,请调用startActivityForResult()
来启动。 这样在 Activity 的回调方法 onActivityResult()
中就会接收到另一个作为结果返回的 Intent
对象。
A、没有返回值的情况
在nowActivity中编写
<span style="white-space:pre"> </span>Intent intent = new Intent();
<span style="white-space:pre"> </span>intent.setClass(nowActivity.this, anotherActivity.class);
<span style="white-space:pre"> </span>intent.putExtra("Name", "hello world"); //传递参数
<span style="white-space:pre"> </span>Bundle bundle = new Bundle();
<span style="white-space:pre"> </span>User user =new User();//传递类
<span style="white-space:pre"> </span>bundle.putSerializable(SER_KEY, vUser);//SER_KEY String类型 唯一值
<span style="white-space:pre"> </span>intent.putExtras(bundle);
<span style="white-space:pre"> </span>startActivity(intent );
在anotherActivity中编写
Intent intent = getIntent();
String name = intent.getStringExtra("name");//获取参数
String name = intent.getStringExtra("name");//获取对象
User user = (User) getIntent().getSerializableExtra(SER_KEY);
B、有返回值的情况
在nowActivity中编写
<span style="white-space:pre"> </span>{
<span style="white-space:pre"> </span>//调用是的方法
<span style="white-space:pre"> </span>Intent intent = new Intent();
intent.setClass(nowActivity.this, anotherActivity.class);
....
startActivityForResult(intent,iRESULT0);//iRESULT 返回值的标示
}
// 处理弹出子窗口的返回情况
public void onActivityResult(int requestCode, int resultCode, Intent data) {
switch (requestCode) {
case iRESULT0:
....
break;
case iRESULT1:
....
break;
end;
}}
在anotherActivity中编写
<span style="white-space:pre"> </span>Intent intent = getIntent();
<span style="white-space:pre"> </span>setResult(nowActivity.iRESULT0, intent);
<span style="white-space:pre"> </span>finish();
第二、启动服务:
Service 是一种在后台执行操作的组件,它没有用户界面。 通过向 startService() 传入一个 Intent, 可以启动一个服务来完成一件一次性的操作(比如下载一个文件)。 在这个Intent 中对需要启动的服务进行了说明,并可附带任何必要的数据。
如果服务设计为 C/S 模式,你可以将其他组件与该服务绑定,这通过向 bindService() 传入一个 Intent 来实现。
通过 Context.startService() 启动一个服务,或者通过Context.bindService() 和后台服务交互;
第三、发布广播:
广播是一种可以被任何应用程序接收的消息。 系统为系统事件发布各种各样的广播消息,比如系统启动、设备开始充电等。 通过向 sendBroadcast()、 sendOrderedBroadcast()或 sendStickyBroadcast() 传入一个 Intent ,就可以向其他应用程序发送一条广播。
通过广播方法(比如 Context.sendBroadcast(),Context.sendOrderedBroadcast(), Context.sendStickyBroadcast()) 发给broadcast receivers。
后续完善,HH