Android 基础Intent与Intent Filter
Intent 设计的目标:
- 启动四大组件
- 高层次解耦
Intent用来干嘛?
启动Activity, Service, BroadcastReceiver
传递数据
为什么要用Intent?
封装“启动意图”
提供统一编程模型
避免耦合
1.1 使用Intent可以启动的系统组件
启动方法 | ||
Activity | ||
startActivity(Intent intent) | ||
startActivityForResult(Intent intent, int responseCode) | ||
Service | ||
ComponentName startService(Intent service) | ||
boolean bindService(Intent service, ServiceConnection conn, int flag) | ||
BroadcastReceiver | ||
sendBroadcast(Intent intent) | ||
sendBroadcast(Intent intent, String receiverPermission) | ||
sendOrderBroadcast(Inent intent) | ||
sendStickyBroadcast(Intent intent) | Broadcast发送完了,消息还好再等待一会 | |
sendStickyOrderBroadcast(Intent intent….) |
1.2 Intent的属性
1.2.1 Component 属性
Component属性其实就是一个ComponentName对象,用于指明要启动的组件类的包名,和类
ComponentName comp = new ComponetName(ThisActivity.this, TargetActivity.class); Intent intent = new Intent(); intent.setComponent(comp); startActivity(intent);
其实我们可以用更简单的方法
Intent intent=new Intent(ThisActivity.this, TargetActivity.class); .....
1.2.2 Action、Category
代表要完成的一个抽象动作
显式意图,隐式意图
<intent-filter>节点下可以包含
0~N个<action/>元素
0~N个<category/>元素
0~1个<data />元素
系统中有名的ACTION:
ACTION_MAIN
ACTION_VIEW
ACTION_CALL直接给指定用户打电话
1.2.3 Data, Type与Intent Filter
指定了Data, 就无需再支持Type属性
Data 属性是一个Uri 的对象实例
content://com.android.contacts/contacts/1
1.2.4 Extra
长用于多个Action之间的数据交换, 是一个Bundle对象