`
peizhiinfo
  • 浏览: 1426756 次
文章分类
社区版块
存档分类
最新评论

浅析Android中的Intent(意图)

 
阅读更多

在学习Intent意图之前,先介绍一点理论知识。看晕了的也不要紧,后面我将会用详细的实例,向大家讲解Intent (意图)。

Android基本的设计理念是鼓励减少组件间的耦合,因此Android提供了Intent (意图) ,Intent提供了一种通用的消息系统,它允许在你的应用程序与其它的应用程序间传递Intent来执行动作和产生事件。使用Intent可以激活 Android应用的三个核心组件:活动、服务和广播接收器(四大组件中还有一个是“内容提供者”--Content Provider )

所谓的“意图”,不要想的太复杂,通俗点说就是“告诉Android系统,你想做什么事儿...”,这是我个人的一点浅见。

Intent可以划分成显式意图和隐式意图。

显式意图:调用Intent.setComponent()或Intent.setClass()方法明确指定了组件名的Intent为显式意图,显式意图明确指定了Intent应该传递给哪个组件。

在上一篇文章Activity的激活及传值中,我们使用Intent(意图)来激活Activity,并传递参数的小实例,就是典型的“显示意图”

隐式意图:没有明确指定组件名的Intent为隐式意图。 Android系统会根据隐式意图中设置的动作(action)、类别(category)、数据(URI和数据类型)找到最合适的组件来处理这个意图。

在使用Android开发“电话拨打功能”的时候,我们通常会使用类似如下的代码:


其中“android.intent.action.CALL”是意图过滤器中的“动作名称”。

有人可能会疑问,我在“电话拨号程序”中好像没有修改项目清单,没有往里面添加任何内容,好像也可以啊!因为电话拨号功能属于Android系统内置,系统会自动去匹配(比较特殊,所以不需要用户手动去添加)。自动生成类似代码:



下面是一个小例子,Activity端的代码:

通常情况,我们在通过隐式意图Intent激活其他组件时,为了匹配,需要在项目清单文件中类似代码:

以前老是看到项目清单文件中有“intent-filter”...,一直不知道有啥用。现在应该明白,意图过滤器的作用了吧?

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics