Android SDK Document Intents and Intent Filters

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

Android应用程序中三个主要的组件Activity, Service, Broadcast receiver都是由Intent中传递过来的消息激活的, Intent消息传递是这样一个基础手段,它把相同或者不同应用程序的组件后期运行绑定起来。Intent对象本身是一个被动的数据结构,它用来承载一个关于将要执行动作的抽象描述在 broadcast的情况下,这个Intent是描述是已经发生,并且被通知到的执行动作[比方说开机完毕, 需要执行一个操作], 下面有很多相互独立机制,为每种类型的组件传递Intent:

1. 一个Intent 对象传给Context.startActivity()或者Activity.startActivityForResult() 去启动一个Activity或者利用已存在的Activity执行某项操作.

2.一个Intent 对象传给Content.startService(),初始化一个Service或者为一个正在进行的Service传递新的指示。同样地,一个intent对象传给Context.bindService(),用来建立主动调用的组件和目标Service之间的连接。如果Service尚未运行,则可选择性的启动。

3.Intent对象传递给任意broadcast方法,如Context.sendBroadcast(), Context.sendOrderBroadCast(),或者Context.sendStickyBroadCast(), 这种方式的传递,会将Intent传递给所有感兴趣的Broadcastreceiver. 许多broadcast起源于系统代码

在上述各情况下,Android系统要找到需要的Activity, Service, 或者是broadcast receiver的集合,从而响应intent消息,并且在需要的情况下初始化这些组件。这些Intent消息没有交集:broadcast intent 只送往broadcast receiver, 不会送往activity或者service. 一个Intent传给startActivity(), 只会送往activity, 不会送给一个service或者broadcast receiver。

本文档开篇介绍Intent对象. 然后介绍Android中intent和组件的映射规则Android如何解决那个组件应该接收一个Intent消息。由于Intent没有明显的指明要调用哪个Component, 这个过程包含测试Intent对象和关联潜在目标组件的Intent filter.

Intent Objects:

一个Intent对象是信息的集合. 它包含需要接收这个Intent的组件感兴趣的消息(如产生什么样的动作,以及这个动作的数据对象),还包含Android系统需要的附加信息(需要处理 这个Intent的组件分类,以及如何启动目标Activity), 原则上,一个Intent包含如下信息:

Component Name : 处理这个Intent的组件名称。 这是一个ComponentName属性对象目标组件的类全名(如"com.example.project.app.FreneticActivity")以及在manifest文件中,设置组件Package位 置的信息(如"com.example.project"). 组件名称的package部分和package的名称不一定要完全匹配。

组件名称是可选的, 如果设置了这个组件名称, Intent对象会发送到指定组件的实例。如果没有设置,Android利用其它的信息定位和是的组件目标查看后续章节的 Intent Resolution.

组件的名称通过setComponent(), setClass(), setClassName()设置,通过getComponent读龋

Action :它是将要执行动作的字符串名称对于Broadcast Intent, 发生的Action不断上报。 Intent类定义了许多Action 常量,包括下面的:

【这里是一个表格.后面去移植】

可以查看API,可以发现预先定义的一些Action常量. 其它的一些Actions定义在Android api的其他地方,可以在自己的应用中,自定义可以被组件激活的Action字符串。这些自定义的需要将应用程序的包名作为前缀, 如"com.example.project.SHOW_COLOR".

Action很大程度上决定了Intent的其他部分的组织结构特别是Intent的data和extras属性如同一个方法名决定了传入的参数和返回值。 鉴于上述原因,明智的做法是:尽可能的使用特别的Action名称,并且和Intent的其他属性紧紧绑定。换句话说,为你的组件用到的Intent对象 定义一个完整的约定,而不是每个Action无规则的各自定义。

Intent中Action的设置是用setAction(),读取采用getAction();

Data :指的是操作的数据以及这个数据的MIME类型。不同的Action对应不同的数据说明。 比如,如果Intent的的action属性为ACTION_EDIT, 则为了显示并编辑,Intent的data属性需要包含文档的URI; 如果Intent的ation属性为ACTION_CALL, 则Intent的data属性需要为tel:包含拨打电话的URI. 同样地, 如果Intent的action域为ACTION_VIEW并且Intent的data域为http:URI, 接收Intent的Activity将被调用并且下载和现实这个URI表示的资源。

当匹配一个Intent到一个组件,并且能够处理数据时,除了了解URI外,获知这个数据的MIME类型是很重要的。比如,一个能打开图像文件的组件,不应该用来播放音频文件。

在很多情况下,可以从URI推断出data的类型特别是content:URIs,它表示数据位于设备中,并且有一个content provider控制(查看separate discussion on consten providers). 但是,数据类型同样可以显示的在Intent对象找哦你个设置. setData()方法仅仅设置数据的URI, setType()方法仅仅设置数据的MIMIE类型,setDataAndType()同时设定URI和MIME类型。通过getData()取URI,通过getType()取MIME类型

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

人工智能实验室
相关文章相关文章
  • 未来两年人工智能要怎么走?看这篇就够了

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

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

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

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

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

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

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

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

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

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

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

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