Android:Intent机制
Android中提供了Intent机制来协助应用间通讯
Intent对动作,数据,进行描述,Android根据此Intent的描述,负责找到对应的组件,将数据传递给调用的组件,并完成组件的调用。
Intent不仅可以用于应用程序之间,也可以用户内部的Activity/service之间通讯
对应Activity:Context.startActivity() or Activity.startActivityForResult()启动一个Activity
对应Service:Context.startService() 启动一个服务 or Context.bindService() 与后台服务通讯
通用:Context.sendBroadcast() Context.sendOrderedBroadcast() Context.sendStickyBroadcast() 发送给广播接收者
Intent的属性:
Action(动作):
|
自定义动作,需要加上包名作为前缀“com.example.project.SHOW_COLOR”
Data(数据):
对于系统内置的应用通常用一种uri格式进行访问
- 页面:http://
- 联系人:content://contacts/people/xxx
- 电话:tel:
- 短信:smsto://
- 彩信:content://
- 邮件:mailto:
- 播放:file:///
- Market:market://
Type(类型):
显式的执行Intent的数据类型(MIME)一般Intent的数据类型能够根据数据本身判定,设置这个属性可以强制采用指定的数据类型而不再进行推到
Category(类别):
设定动作的附加信息
|
Component(组成):
指定用于意图的组件类的显示名称,指定该属性,其他属性为可选
Extras(附加):
捆绑的额外信息,通过Bundle进行结构化
实例:
1.无参数Activity跳转
Intent it = new Intent(Activity.Main.this,Activity2.class); startActivity(it);
2.向下一个Activity传递数据
Intent it = new Intent(Activity.Main.this,Activity2.class); Bundle bundle = new Bundle(); bundle.putString("name","This is from MainActivity!"); it.putExtras(bundle); startActivity(it);
获取数据
Bundle bundle=getIntet().getExtras(); String name = bundle.getString("name");
3.向上一个Activity返回结果
(使用setResult,针对startActivityForResult(it,REQUEST_CODE)启动的Activity)
@Override protected void onActivityResult(int requestCode,int resultCode,Intent data){ super.onActivityResult(requestCode,resultCode,data); if(requestCode==REQUEST_CODE){ if(resultCode==RESULT_CANCELED) setTitle("cancel"); else if(resultCode==RESULT_OK){ String temp=null; Bundle bundle=data.getExtras(); if(bundle!=null) temp=bundle.getString("name"); setTitle(temp); } } }