Intent IntentFilter
Intent 类的对象是组件间通信的载体,组件间通信就是一个一个的 Intent 对象在不断传递。
Android 的三大核心组件 Activity,Service 和 BroadcastReceiver 通过 Intent 对象进行通信。
对于这三个组件,Intent 的作用方式为:
Activity 组件:Intent 主要通过调用
Context.startActivity(),Context.startActivityForResult()等方法实现传递,其结果就是启动
一个新的 Activity 或者使当前 Activity 开始新的任务。
Service 组件:Intent 主要通过调用 Context.startService()和 Context.bindService()方法
实现传递。起作用结果是初始化并启动一个服务或绑定一个服务到 Context 对象。
BroadcastReceiver 组件:Intent 主要通过 sendBroadcast()等一系列发送广播的的方
法实现传递。起作用结果就是将 Intent 组件以广播的形式发出,以便合适的组件接收。
一个 Intent 对象就是一组信息,其包含一下内容:
一:Component Name 部分
这部分(组件名)指定了未来要处理该 Intent 对象的组件,封装在一个
ComponentName 对象中,该对象唯一标识一个应用程序组件。ComponentName 类包含
两个 String 成员,分别代表组件的全称类名和包名,包名必须和 AndroidManifest.xml 文件
中标记中的对应信息一致。
组件名通过 setComponent(),setClass()或 setClassName()设置,通过
getComponent()读取。
对于 Intent,组件名并不是必须的。如果一个 Intent 对象添加了组件名,则称该 Intent
为“显示 Intent”,这样的 Intent 在传递的时候会直接根据组件名去寻找目标组件。如果没有
添加组件名,则称为“隐式 Intent”,Android 会根据 Intent 中的其他信息来确定响应该
Intent 的组件。
二:Action 部分
Action 部分是一个字符串对象。描述了 Intent 会触发的动作。Android 系统中已经预
定义了一些 Action 常量,可以参看 sdk 帮助文档,如 ACTION_MAIN,ACTION_CALL 等。
同时,开发者也可以定义自己的 Action 描述。一般来讲,定义自己的 Action 字符串应该以
应用程序的包名为前缀(防止重复定义)。由于 Action 部分很大程度上决定了一个 Intent
的内容,所以自己定义的 Action 字符串应该能够一眼看出其意图。
一个 intent 对象的动作通过 setAction()方法设置,通过 getAction()方法读取。