Intents 和 Intent Filters
(Intent译为意图,让人比较费解,实际上解释为“消息”更加合理,干脆就不翻译了)
Intent是能在app组件间传递的消息体,基本使用方式有如下三种:
- 启动activity
- startActivity:intent描述需要启动的activity和必须的数据
- startActivityForResult:intent启动的activity结束后,会触发onActivityResult回调
- 启动服务
- startService:intent描述需要启动的service和必须的数据
- bindService
- 发送广播
- 通过Intent来的
sendBroadcast()
,sendOrderedBroadcast()
, orsendStickyBroadcast()
来发送广播
Intent类型
- 显式intents:通过指定包名+类名来明确需要启动的组件,一般用在app内部使用。
- 隐式intents:不指定具体的组件,通过定义一些动作或者条件,在系统中匹配能够执行动作或者满足条件的组件。
- A创建intent,作为入参startActivity
- Android系统搜索所有app的intent filter用于适配A发出的intent。(如果有多个匹配上,会弹框给用户选择)
- Android系统通过onCreate启动匹配上的B,并把A的intent当做入参
Caution: 为了确保你的app是安全的,通常用显式intent的方式来启动service,因为用隐式intent启动服务是有安全风险的,隐式intent无法预知启动的service就是你想要的那个。
创建一个Intent
Intent主要包含如下属性:
组件名
需要启动的组件名,一般指包名+类名:com.example.ExampleActivity
对于显式intent是必选的,对于隐式intent,不能指定。
Action(动作?)
Data(数据)
Category(类别)
Extras(额外信息)
Flags(标记)
显式intent例子
隐式intent例子
应用程序选择器
接收隐式intent
过滤器例子
使用Pending Intent
Intent解析
Action测试
Category测试
Data测试
Intent匹配
Develop系列-API Guides-应用组件-Intents and Intent Filters(1),布布扣,bubuko.com