Intent和IntentFilter详解 android开发教程

  次阅读 作者:智能小宝 来源:互联网 2016-01-14 09:27 我要评论(0)

Intent用于启动Activity,Service, 以及BroadcastReceiver三种组件, 同时还是组件之间通信的重要媒介。

使用Intent启动组件的优势

1, Intent为组件的启动提供了一致的编程模型。无论想要启动的组件是Activity,Service, 还是BroadcastReceiver,都可以使用Intent封装启动的意图。

2, 在某些时候, 应用程序只是想启动具有某种特征的组件, 并不想和某个特定的组件耦合。使用Intent可以方便的达到这种高层次解耦的目的。

Intent的Component属性

Intent对象的setComponent(ComponentNamecomp)方法用于设置Intent的Component属性。 ComponentName包含如下几个构造器:

ComponentName(Stringpkg, String cls)

ComponentName(Contextpkg, String cls)

ComponentName(Contextpkg, Class cls)

由以上的构造器可知, 创建一个ComponentName对象需要指定包名和类名--这就可以唯一确定一个组件类, 这样应用程序即可根据给定的组件类去启动特定的组件。例如:

ComponentName comp =new ComponentName(FirstActivity。this,SecondActivity。class);

Intent intent = newIntent();

intent。setComponent(comp);

以上三句代码创建了一个intent对象, 并为其指定了Component属性, 完全等价于下面的代码:

Intent intent = newIntent(FirstActivity。this,SecondActivity。class);

除了使用setComponent()之外, 还可以使用setClass(),setClassName()来显式指定目标组件, 还可以调用getComponent()方法获得Intent中封装的ComponentName对象。

当程序采用这种形式启动组件时, 在Intent中明确的指定了待启动的组件类, 此时的Intent属于显式intent, 显式Intent应用场合比较狭窄, 多用于启动本应用中的component,因为这种方式需要提前获知目标组件类的全限定名。而隐式Intent则通过Intent中的 action,category, data属性指定目标组件需要满足的若干条件, 系统筛选出满足所有条件的component,从中选择最合适的component或者由用户选择一个component作为目标组件启动。

如果Intent中指定了ComponentName属性, 则Intent的其他属性将被忽略。

Intent的Action属性

action属性是一个字符串, 代表某一种特定的动作。 Intent类预定义了一些action常量, 开发者也可以自定义action。一般来说, 自定义的action应该以application的包名作为前缀, 然后附加特定的大写字符串, 例如"cn。xing。upload。action。UPLOAD_COMPLETE"就是一个命名良好的action。

Intent类的setAction()方法用于设定action,getAction()方法可以获取Intent中封装的action。

以下是Intent类中预定义的部分action:

ACTION_CALL--目标组件为activity,代表拨号动作;

ACTION_EDIT--目标组件为activity,代表向用户显示数据以供其编辑的动作;

ACTION_MAIN--目标组件为activity,表示作为task中的初始activity启动;

ACTION_BATTERY_LOW--目标组件为broadcastReceiver,提醒手机电量过低;

ACTION_SCREEN_ON--目标组件为broadcast,表示开启屏幕。

Intent的Category属性

category属性也是一个字符串, 用于指定一些目标组件需要满足的额外条件。 Intent对象中可以包含任意多个category属性。 Intent类也预定义了一些category常量, 开发者也可以自定义category属性。

Intent类的addCategory()方法为Intent添加Category属性,getCategories()方法用于获取 Intent中封装的所有category。

以下是Intent类中预定义的部分category:

CATEGORY_HOME--表示目标activity必须是一个显示homescreen的activity;

CATEGORY_LAUNCHER--表示目标activity可以作为task栈中的初始activity,常与ACTION_MAIN配 合使用;

CATEGORY_GADGET--表示目标activity可以被作为另一个activity的一部分嵌入。

Intent的Data属性

data属性指定所操作数据的URI。 data经常与action配合使用, 如果action为ACTION_EDIT,data的值应该指明被编辑文档的URI; 如果

本站文章信息来源于网络以及网友投稿,本站只负责对文章进行整理、排版、编辑,是出于传递更多信息之目的,并不意味着赞同其观点或证实其内容的真实性。如果您有什么意见或建议,请联系QQ28-1688-302!

人工智能实验室
相关文章相关文章
  • 无人驾驶汽车如何改变城市生活?听听他们怎么说

    无人驾驶汽车如何改变城市生活?听听他们怎么说

  • 英国研发“杀生”机器人 通过生命体获取能量

    英国研发“杀生”机器人 通过生命体获取能量

  • 未来两年人工智能要怎么走?看这篇就够了

    未来两年人工智能要怎么走?看这篇就够了

  • 韩春雨称已能重复实验结果 近期将有消息公布

    韩春雨称已能重复实验结果 近期将有消息公布

网友点评网友点评
阅读推荐阅读推荐

据国外媒体报道,在过去两年内,聊天机器人(chatbot)、人工智能以及机器学习的研发和采用取得了巨大进展。许多初创公司正利用人工智能和...

霍金 视觉中国 图 英国著名物理学家霍金(Stephen Hawking)再次就人工智能(AI)发声,他认为:对于人类来说,强大AI的出现可能是最美妙的...

文|郑娟娟 今年,人工智能(AI) 60岁了。在AI60岁的时候,笔者想要介绍一下AI100,一个刚刚2岁的研究项目,但它的预设寿命是100年,甚至更长...

AlphaGo与李世石的人机大战,为大众迅速普及了人工智能的概念。 但对谷歌而言,除了下围棋,现在的人工智能进展到哪一步了?未来,人工智能...