首页 > 代码库 > Develop系列-API Guides-应用组件-Intents and Intent Filters(1)

Develop系列-API Guides-应用组件-Intents and Intent Filters(1)

Intents 和 Intent Filters

(Intent译为意图,让人比较费解,实际上解释为“消息”更加合理,干脆就不翻译了)

Intent是能在app组件间传递的消息体,基本使用方式有如下三种:

  • 启动activity
    • startActivity:intent描述需要启动的activity和必须的数据
    • startActivityForResult:intent启动的activity结束后,会触发onActivityResult回调
  • 启动服务
    • startService:intent描述需要启动的service和必须的数据
    • bindService
  • 发送广播
    • 通过Intent来的sendBroadcast(),sendOrderedBroadcast(), or sendStickyBroadcast()来发送广播

Intent类型

  • 显式intents:通过指定包名+类名来明确需要启动的组件,一般用在app内部使用。
  • 隐式intents:不指定具体的组件,通过定义一些动作或者条件,在系统中匹配能够执行动作或者满足条件的组件。

  1. A创建intent,作为入参startActivity
  2. Android系统搜索所有app的intent filter用于适配A发出的intent。(如果有多个匹配上,会弹框给用户选择)
  3. Android系统通过onCreate启动匹配上的B,并把A的intent当做入参

Caution: 为了确保你的app是安全的,通常用显式intent的方式来启动service,因为用隐式intent启动服务是有安全风险的,隐式intent无法预知启动的service就是你想要的那个。

创建一个Intent

Intent主要包含如下属性:

组件名

需要启动的组件名,一般指包名+类名:com.example.ExampleActivity

对于显式intent是必选的,对于隐式intent,不能指定。

image

Action(动作?)

 

Data(数据)

Category(类别)

Extras(额外信息)

Flags(标记)

显式intent例子

隐式intent例子

应用程序选择器

接收隐式intent

过滤器例子

使用Pending Intent

Intent解析

Action测试

Category测试

Data测试

Intent匹配