本文来自:安卓航班网

应该递交给意图处理组件的附加信息键-值对。就像一些动作伴随着特定的数据URIs类型,一些动作则伴随着特定的附加信息。比如,一个ACTION_TIMEZONE_CHANGED意图有一个“时区”附加信息用来区别新的时区,而ACTION_HEADSET_PLUG有一个“状态”附加字段表明耳机有没有插着,以及一个“名字”附加信息来表示耳机的类型。如果你想要创建一个SHOW_COLOR动作,颜色的值将被设置在一个附加的键-值对中。
意图对象有一系列的put...()方法来插入各种不同的附加数据和一个类似的用来读取数据的get...()方法系列。这些方法与Bundle对象的方法相似。事实上,附加信息可以被当作一个Bundle通过使用putExtras()和getExtras()方法安装和读取。

标志Flags
       各种类型的标志. 许多标志用来指示Android系统如何去加载一个活动(例如,哪个是这个活动应该归属的任务)和启动后如何对待它(比如,它是否属于当前活动列表),所有这些列表都在意图类中定义了。
Android系统以及这个平台上的应用程序利用意图对象来发送源于系统的广播以及激活系统定义的组件。要查阅如何组织一个意图去激活一个系统组件,请咨询引用中的意图列表list of intents。

意图解析Intent Resolution
       意图可以被分成两组:

显式意图  通过名字指明目标组件(这个组件名字字段component name field, 前面提到过, 有一个数值集)。既然组件名称通常不为其他应用程序的开发者所了解,显式意图典型的被用作应用程序的内部消息-例如一个活动启动一个附属服务或姊妹活动。
       隐式意图不命名目标组件(组件名称字段为空)。隐式意图经常用来激活其他应用程序的组件。
Android递交一个显式的意图给一个指定目标类的实例。意图对象中的组件名称唯一的确定哪个组件应该获取这个意图。隐式意图需要一个不同的策略。在没有指定目标的情况下,Android系统必须找到最合适的组件来处理这个意图-单个活动或者服务来执行这个请求动作或者一系列的广播接收器来应对广播通告。
       这是通过比较意图对象的内容和意图过滤器,有可能接收意图的组件相关结构。过滤器公布一个组件具备的能力以及限定它能处理的意图。他们使组件接收该公布类型的隐式意图成为可能。如果一个组件没有任何的意图过滤器,那它只能接收显式意图。一个带过滤器的组件可以同时接收显式和隐式意图。

当一个意图对象被一个意图过滤器测试时,只有三个方面会被参考到:
       动作
       数据(URI以及数据类型)
       类别
       附加信息和标志并不参与解析哪个组件接收一个意图。

意图过滤器Intent filters

为了通知系统它们可以处理哪些意图,活动、服务和广播接收器可以有一个或多个意图过滤器。每个过滤器描述组件的一个能力,一系列组件想要接收的意图。它实际上按照一个期望的类型来进行意图滤入,同时滤出不想要的意图-但是只有不想要的隐式意图会被滤出(那些没有命名目标的对象类)。一个显式意图总能够被递交给它的目标,而无论它包含什么。这种情况下过滤器不起作用。但是一个显式意图仅当它能通过组件的一个过滤器时才可以被递交到这个组件。

组件为它能做的每项工作,每个呈现给用户的不同方面分有不同的过滤器。比如,范例记事本应用程序中的主要活动有三个过滤器-一个是空白板,另一个是用户可以查看、编辑、或选择的一个指定的记事目录,第三是在没有初始目录说明的情况下查找一个特定的记录。一个意图过滤器是IntentFilter类的一个实例。但是,由于Android系统在启动一个组件前必须知道这个组件的能力,意图过滤器通常不会用Java代码来设置,而是在应用程序清单文件(AndroidManifest.xml)中设置元素。(有一个例外,通过调用Context.registerReceiver() 来注册的广播接收器的过滤器;它们是作为意图过滤器对象而被直接创建的。

过滤器与安全Filters and security

       不能信赖一个意图过滤器的安全性。当它打开一个组件来接收某些特定类型的隐式意图,它并不能阻止以这个组件为目标的显式意图。即使过滤器对组件要处理的意图限制某些动作和数据源,总有人能把一个显式意图和一个不同的动作及数据源组合在一起,然后命名该组件为目标。

一个过滤器和意图对象有同样的动作、数据以及类别字段。一个隐式意图在过滤器的所有三个方面都被测试。为了递交到拥有这个过滤器的组件,它必须通过所有这三项测试。即便只有一个不通过,Android系统都不会把它递交给这个组件-至少以那个过滤器的标准而言。不过,由于一个组件可以包含多个意图过滤器,一个不能通过其中一个组件过滤器的意图可能在另外的过滤器上获得通过。

原文地址:http://www.apkway.com/forum.php?mod=viewthread&tid=1230&extra=page%3D2

转载于:https://www.cnblogs.com/yyq-quan/archive/2011/07/09/2101972.html

Android 意图和意图过滤器(二)相关推荐

  1. 6、二、App Components(应用程序组件):1、Intents and Intent Filters(意图和意图过滤器)...

    1.Intents and Intent Filters(意图和意图过滤器) 1.0.Intents and Intent Filters(意图和意图过滤器) An Intent is a messa ...

  2. android 意图过滤,Android 意图(Intent)及过滤器(Filter).pdf

    Android 意图(Intent)和过滤器(Filter) Android 意图(Intent)和过滤器(Filter) Android意图是⼀个要执⾏的操作的抽象描述.它可以通过 startAct ...

  3. Android中的意图匹配--IntentFilter的作用

    [0]Android基本的设计理念是鼓励减少组件间的耦合,因此Android提供了Intent (意图) ,Intent提供了一种通用的消息系统,它允许在你的应用程序与其它的应用程序间传递Intent ...

  4. 通过Android上的意图启动Google地图路线

    本文翻译自:Launching Google Maps Directions via an intent on Android My app needs to show Google Maps dir ...

  5. Android显式意图和隐式意图

    intent基本理解 我们都知道Android四大组件:Activity .Service.broadcast receiver 及 内容提供者. 其中,Activity .Service.broad ...

  6. Android PAD扫描枪扫描二维码条形码

    Android PAD扫描枪扫描二维码条形码 1,目前扫描条码只有通过按键触发,按下按键会发送F12的键值,可以通过监听F12键判断是否触发扫描 2,扫到的条码我们会在当前光标处显示出来,同时也发了一 ...

  7. 【朝花夕拾】Android性能篇之(二)Java内存分配

    前言       原文:[朝花夕拾]Android性能篇之(二)Java内存分配        在内存方面,相比于C/C++程序员,咱们java系程序员算是比较幸运的,因为对于内存的分配和回收,都交给 ...

  8. Android 10.0 PackageManagerService(二)权限扫描-[Android取经之路]

    摘要:PackageManagerService在systemReady()后,进行了/system/etc/permissions中的各种xml进行扫描,进行相应的权限存储,供以后使用 阅读本文大约 ...

  9. Android系列之Fragment(二)----Fragment的生命周期和返回栈

    ​[声明] 欢迎转载,但请保留文章原始出处→_→ 生命壹号:http://www.cnblogs.com/smyhvae/ 文章来源:http://www.cnblogs.com/smyhvae/p/ ...

最新文章

  1. C语言中的sizeof中的数组和指针
  2. 1.19 利用内部类实现多重继承
  3. python中print的用法_python中print用法
  4. ubuntu16.04 + kinetic +turtlebot2配置
  5. 浅析Linux开发工具之gcc/g++
  6. ros::spin() 和 ros::spinOnce()
  7. 配置文件是什么东西?
  8. 开源2D图形库/图形框架
  9. java random api_API中的Scanner、Random、ArrayList、String类
  10. webpack文件系统缓存
  11. 如何快速的把JSON转Excel怎么转?
  12. 嵌入式单片机基础篇(三十七)之485通讯以及51单片机程序
  13. 手机mtkcdc端口如何开启_联想手机MTK线刷设置PreLoader端口的方法
  14. (转帖)CAP理论(1)
  15. 2021江苏高考成绩查询:声讯台,2021年江苏高考成绩几点钟可以查询,附具体查询时间安排...
  16. 2020年10种最佳移动开发编程语言
  17. 目标决定人生——没有目标就失去一切!
  18. Full Convert相互转换器,转换数据库格式简单的方法
  19. CodeCombat计算机科学6.14脆弱的迷宫
  20. html复选框,如何通过AJAX动态获取数据库的数据作为复选框显示在页面上

热门文章

  1. 运用div css和java_如何将css应用于div模式
  2. ios charts显示固定个数_上次挂在了百度iOS二面不服气, 三月之期已到,这次终于拿下offer!...
  3. 为什么不可变性在 React 中非常重要
  4. 数字图像恢复matlab结论,matlab模糊图像恢复数字图像处理
  5. 20200331:每日温度(leetcode739)
  6. 20191022:(leetcode习题)山脉数组的峰顶索引
  7. android meminfo,Android中dumpsys meminfo与/proc/meminfo获取空闲内存不一致的问题
  8. java项目中包的命名规范
  9. 帆软报表数据库配置及关系
  10. VB中DoEvents的注意事项