Android---允许其他应用程序启动你的Activity

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

前面的两课一直关注了故事的一边:从你的应用程序中启动另一个应用程序的Activity。但是如果你的应用能够执行一个可能对另外的应用程序有用的操作,那么你的应用程序就应该准备响应来自其他应用程序的操作请求。例如,如果你创建了一个能够跟用户的朋友共享消息和照片的社区应用,那么你就应该支持ACTION_SEND类型的Intent,以便用户能够启动来自其他应用程序的共享操作,并加载你的应用程序来执行这个操作。

要允许其他的应用程序来启动你的Activity,你需要在你的清单文件的相应的<activity>元素中添加一个<intent-filter>元素。

当你的应用程序被安装到设备上时,系统会识别你的Intent过滤器,并把这个信息添加到一个由所有被安装应用程序所支持的内部的Intent目录中。当一个应用程序用隐含的Intent对象来调用startActivity()或startActivityForResult()方法时,系统就会在这个目录中查找那些Activity能够响应这个Intent的请求。

添加Intent过滤器

为了能够正确的定义你的Activity所能处理的Intent对象,Activity接收的操作和数据应该尽可能在每个被添加的Intent过滤器中进行具体的定义。

如果Activity有一个跟下列Intent对象条件完全匹配的Intent过滤器,系统就会把给定的Intent对象发送给这个Activity:

Action

定义要执行的操作名称(字符串)。通常是由平台定义的一个值,如ACTION_SEND或ACTION_VIEW。

使用过滤器中的<action>元素来指定操作。在这个元素中指定的值必须是该操作完整的字符串名称,而不是API常量。

Data

定义跟该Intent匹配的数据

使用过滤器中的<data>元素来指定数据。使用这个元素中的一个或多个属性,你能够只简单指定MIME类型、URI前缀、URI方案,或者是这些的组合,以及其他的能够接收的数据类型的指示。

注意:如果你不需要声明指定相关数据的Uri(如当你的Activity要处理其他类型的附加数据时,而不是URI),那么就应该只指定android:mimeType属性来声明你的Activity所能处理的数据类型,如text/plain或image/jpeg。

Category

提供两外一种Activity处理Intent对象的方法,通常与用户的手势或其他的位置有关。系统支持几种不同的分类,但是很少被使用。但是默认情况下,所有的隐含的Intent对象都要使用CATEGORY_DEFAULT来定义。

在Intent过滤器中使用<category>元素来指定这个分类信息。

在你的Intent过滤器中,你可以在<intent-filter>元素中嵌套上述对应XML元素来声明你的Activity所能接收的Intent对象的条件。

例如,以下Activity的Intent过滤器的声明,能够处理ACTION_SEND类型的Intent对象,并且数据类型可以是文本或图片:

<activityandroid:name="ShareActivity">

<intent-filter>

<action android:name="android.intent.action.SEND"/>

<category android:name="android.intent.category.DEFAULT"/>

<data android:mimeType="text/plain"/>

<data android:mimeType="image/*"/>

</intent-filter>

</activity>

每个输入的Intent对象只能指定一个操作和一种数据类型,但是在每个<intent-filter>元素中则可以声明多个<action>、<category>、<data>元素的实例。

如果任何两个操作和数据的行为是相互排斥的,那么你应该给它们建立独立的Intent过滤器,并在每个Intent过滤器中指定其可接收的操作和对应的数据类型。

例如,假设你的Activity可以使用ACTION_SEND和ACTION_SENDTO类型的Intent来处理文本和图片。这种情况下,你就必须给这两个操作分别定义独立的Intent过滤器,因为ACTION_SENDTO类型的Intent对象必须使用数据的Uri来指定收件人的地址,例如:

<activityandroid:name="ShareActivity">

<!-- filter for sending text; accepts SENDTO action with sms URI schemes -->

<intent-filter>

<action android:name="android.intent.action.SENDTO"/>

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

人工智能实验室
相关文章相关文章
  • 韩春雨称已能重复实验结果 近期将有消息公布

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

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

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

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

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

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

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

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

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

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

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

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