Android中的IntentFilter与平安卓越始于足下.docVIP

  • 5
  • 0
  • 约2.93万字
  • 约 7页
  • 2017-05-30 发布于河南
  • 举报

Android中的IntentFilter与平安卓越始于足下.doc

Android中的IntentFilter与平安卓越始于足下

Android中的IntentFilter与安全卓越始于足下 Intent是Android应用程序核心组件之间通信和传递信息的核心机制。与之相关的IntentFilter也具有相关的安全机制(测试)来进行约束。本文将对其进行详细介绍。 一、Intent和IntentFilter简介 一个应用程序的三个核心组件(活动,服务和广播接收器)都是通过消息即意图(Intents)来激活的。Intent消息传送是相同或不同应用中组件运行时晚绑定的一种机制。意图本身(一个意图对象)是一个包含被执行操作抽象描述的被动的数据结构。或,对于广播而言,是某件已经发生并被声明的事情的描述。存在如下几种不同的机制来传送意图到每种组件中: 一个意图对象是传递给Context.startActivity()或者Activity.startActivityForResult()来启动一个活动或者让一个存在的活动去做某些新的事情。 一个意图对象是传递给Context.startService()来发起一个服务或者递交新的指令给运行中的服务。类似的,一个意图能被传递给Context.bindService() 来在调用组件和一个目标服务之间建立连接。作为一个可选项,它可以发起这个服务如果还没运行的话。 传递给任意广播方法(例如Context.sendBroadcast(),Context.sendOrderedBroadcast(),或者Context.sendStickyBroadcast())的意图对象被传递给所有感兴趣的广播接收者。许多种广播产生于系统代码。 在每个例子里,Android系统找到合适的活动、服务或者一组广播接收者来回应这个意图,必要时实例化它们。这些消息传送系统没有重叠:广播意图仅被传递给广播接收者,永远不会给活动或者服务。一个传送给startActivity()的意图是只会被传递给一个活动,永远不会给一个服务或广播接收者,如此类推。 为了通知系统它们可以处理哪些意图,活动、服务和广播接收器可以有一个或多个意图过滤器。每个过滤器描述组件的一个能力,一系列组件想要接收的意图。它实际上按照一个期望的类型来进行意图滤入,同时滤出不想要的意图-但是只有不想要的隐式意图会被滤出(那些没有命名目标的对象类)。一个显式意图总能够被递交给它的目标,而无论它包含什么。这种情况下过滤器不起作用。但是一个显式意图仅当它能通过组件的一个过滤器时才可以被递交到这个组件。 组件为它能做的每项工作,每个呈现给用户的不同方面分有不同的过滤器。比如,范例记事本应用程序中的主要活动有三个过滤器:一个是空白板,另一个是用户可以查看、编辑、或选择的一个指定的记事目录,第三是在没有初始目录说明的情况下查找一个特定的记录。一个意图过滤器是IntentFilter类的一个实例。但是,由于Android系统在启动一个组件前必须知道这个组件的能力,意图过滤器通常不会用Java代码来设置,而是在应用程序清单文件(AndroidManifest.xml)中设置intent-filter元素。(有一个例外,通过调用Context.registerReceiver()来注册的广播接收器的过滤器;它们是作为意图过滤器对象而被直接创建的。 二 、过滤器与安全Filters and security 我们不能信赖一个意图过滤器的安全性。当它打开一个组件来接收某些特定类型的隐式意图,它并不能阻止以这个组件为目标的显式意图。即使过滤器对组件要处理的意图限制某些动作和数据源,总有人能把一个显式意图和一个不同的动作及数据源组合在一起,然后命名该组件为目标。 一个过滤器和意图对象有同样的动作、数据以及类别字段。一个隐式意图在过滤器的所有三个方面都被测试。为了递交到拥有这个过滤器的组件,它必须通过所有这三项测试。即便只有一个不通过,Android系统都不会把它递交给这个组件。不过,由于一个组件可以包含多个意图过滤器,一个不能通过其中一个组件过滤器的意图可能在另外的过滤器上获得通过。 与之相关的三个测试详细描述如下: 测试一:动作测试(Actiontest) 清单文件中的意图过滤器元素里列举了动作元素,比如: intent-filter. . . action android:name=ject.SHOW_CURRENT / action android:name=ject.SHOW_RECENT / action android:name=ject.SHOW_PENDING / . . . /intent-filter 如同例子所示,一个意图对象只对单个动作命名,而一个过滤器可能列举多个。列表不能为空;一个过滤器必须包含至少一个动作元素,否则它将阻塞所有的意图。 为了通过这个测试,在意图对象

文档评论(0)

1亿VIP精品文档

相关文档